protected void ApplyFields(ClarifyDataRow row)
        {
            foreach (FieldProtocol field in this.Fields)
            {
                if (!ClarifyApplication.Instance.SchemaCache.IsValidField(this.Table, field.Name))
                {
                    throw new InvalidOperationException(string.Format("Field '{0}' is not valid for object '{1}'", field.Name, this.Table));
                }

                SchemaFieldBase schemaField = ClarifyApplication.Instance.SchemaCache.GetField(this.Table, field.Name);

                object fieldValue = null;
                try
                {
                    switch (schemaField.CommonType)
                    {
                    case (int)SchemaCommonType.String:
                        fieldValue = field.Value;
                        break;

                    case (int)SchemaCommonType.Date:
                        fieldValue = DateTime.Parse(field.Value);
                        break;

                    case (int)SchemaCommonType.Float:
                        fieldValue = float.Parse(field.Value);
                        break;

                    case (int)SchemaCommonType.Double:
                        fieldValue = double.Parse(field.Value);
                        break;

                    case (int)SchemaCommonType.Decimal:
                        fieldValue = decimal.Parse(field.Value);
                        break;

                    case (int)SchemaCommonType.Integer:
                        fieldValue = int.Parse(field.Value);
                        break;

                    default:
                        throw new InvalidOperationException(string.Format("Parse logic not implemented for SchemaCommonType.{0}", schemaField.CommonType));
                    }
                }
                catch (FormatException ex)
                {
                    throw new InvalidOperationException(string.Format("Could not parse field value '{0}' for field '{1}' on object '{2}'.", field.Value, field.Name, this.Table), ex);
                }

                row[field.Name] = fieldValue;
            }
        }
        private void ParseQueryItemFilters(QueryProtocol queryItem)
        {
            foreach (FilterProtocol filter in queryItem.Filters)
            {
                if (!ClarifyApplication.Instance.SchemaCache.IsValidField(
                        queryItem.ObjectName, filter.Field))
                {
                    throw new ApplicationException(string.Format("'{0}' is not a valid field for object '{1}'.",
                                                                 filter.Field, queryItem.ObjectName));
                }

                SchemaFieldBase field = ClarifyApplication.Instance.SchemaCache.GetField(queryItem.ObjectName, filter.Field);

                NumberOps numberOp;
                switch (field.CommonType)
                {
                case (int)SchemaCommonType.String:
                    StringOps strOp = (StringOps)GetParsedFilterOperation(typeof(StringOps), filter, queryItem.ObjectName);
                    queryItem.ClarifyGeneric.AppendFilter(filter.Field, strOp, filter.Value);
                    break;

                case (int)SchemaCommonType.Date:
                    DateOps  dateOp  = (DateOps)GetParsedFilterOperation(typeof(DateOps), filter, queryItem.ObjectName);
                    DateTime dateVal = GetParsedFilterValueToDateTime(filter, queryItem.ObjectName);

                    queryItem.ClarifyGeneric.AppendFilter(filter.Field, dateOp, dateVal);
                    break;

                case (int)SchemaCommonType.Float:
                case (int)SchemaCommonType.Double:
                case (int)SchemaCommonType.Decimal:
                    numberOp = (NumberOps)GetParsedFilterOperation(typeof(NumberOps), filter, queryItem.ObjectName);
                    Decimal decVal = GetParsedFilterValueToDecimal(filter, queryItem.ObjectName);

                    queryItem.ClarifyGeneric.AppendFilter(filter.Field, numberOp, decVal);
                    break;

                case (int)SchemaCommonType.Integer:
                    numberOp = (NumberOps)GetParsedFilterOperation(typeof(NumberOps), filter, queryItem.ObjectName);
                    int intVal = GetParsedFilterValueToInetger(filter, queryItem.ObjectName);

                    queryItem.ClarifyGeneric.AppendFilter(filter.Field, numberOp, intVal);
                    break;

                default:
                    throw new InvalidOperationException(string.Format("Parse logic not implemented for SchemaCommonType.{0}", field.CommonType));
                }
            }
        }
        protected void ApplyUniqueFields()
        {
            foreach (FieldProtocol field in this.UniqueFields)
            {
                if (!ClarifyApplication.Instance.SchemaCache.IsValidField(this.Table, field.Name))
                {
                    throw new InvalidOperationException(string.Format("Field '{0}' is not valid for object '{1}'", field.Name, this.Table));
                }

                SchemaFieldBase schemaField = ClarifyApplication.Instance.SchemaCache.GetField(this.Table, field.Name);

                try
                {
                    switch (schemaField.CommonType)
                    {
                    case (int)SchemaCommonType.String:
                        this.ClarifyGeneric.AppendFilter(field.Name, StringOps.Equals, field.Value);
                        break;

                    case (int)SchemaCommonType.Date:
                        DateTime dateVal = DateTime.Parse(field.Value);
                        this.ClarifyGeneric.AppendFilter(field.Name, DateOps.Equals, dateVal);
                        break;

                    case (int)SchemaCommonType.Float:
                    case (int)SchemaCommonType.Double:
                    case (int)SchemaCommonType.Decimal:
                        decimal decVal = decimal.Parse(field.Value);
                        this.ClarifyGeneric.AppendFilter(field.Name, NumberOps.Equals, decVal);
                        break;

                    case (int)SchemaCommonType.Integer:
                        int intVal = int.Parse(field.Value);
                        this.ClarifyGeneric.AppendFilter(field.Name, NumberOps.Equals, intVal);
                        break;

                    default:
                        throw new InvalidOperationException(string.Format("Parse logic not implemented for SchemaCommonType.{0}", schemaField.CommonType));
                    }
                }
                catch (FormatException ex)
                {
                    throw new InvalidOperationException(string.Format("Could not parse field value '{0}' for field '{1}' on object '{2}'.", field.Value, field.Name, this.Table), ex);
                }
            }
        }
        private void ParseQueryItemFiltersInList(QueryProtocol queryItem)
        {
            foreach (FilterInListProtocol filter in queryItem.FiltersInList)
            {
                if (!ClarifyApplication.Instance.SchemaCache.IsValidField(
                        queryItem.ObjectName, filter.Field))
                {
                    throw new ApplicationException(string.Format("'{0}' is not a valid field for object '{1}'.",
                                                                 filter.Field, queryItem.ObjectName));
                }

                SchemaFieldBase field = ClarifyApplication.Instance.SchemaCache.GetField(queryItem.ObjectName, filter.Field);

                switch (field.CommonType)
                {
                case (int)SchemaCommonType.String:
                    queryItem.ClarifyGeneric.AppendFilterInList(filter.Field, filter.IsIn, filter.Values);
                    break;

                case (int)SchemaCommonType.Date:
                    DateTime[] dateVals = GetParsedFilterInListValueToDateTime(filter, queryItem.ObjectName);

                    queryItem.ClarifyGeneric.AppendFilterInList(filter.Field, filter.IsIn, dateVals);
                    break;

                case (int)SchemaCommonType.Float:
                case (int)SchemaCommonType.Double:
                case (int)SchemaCommonType.Decimal:
                    Decimal[] decVals = GetParsedFilterInListValueToDecimal(filter, queryItem.ObjectName);

                    queryItem.ClarifyGeneric.AppendFilterInList(filter.Field, filter.IsIn, decVals);
                    break;

                case (int)SchemaCommonType.Integer:
                    int[] intVals = GetParsedFilterInListValueToInetger(filter, queryItem.ObjectName);

                    queryItem.ClarifyGeneric.AppendFilterInList(filter.Field, filter.IsIn, intVals);
                    break;

                default:
                    throw new InvalidOperationException(string.Format("Parse logic not implemented for SchemaCommonType.{0}", field.CommonType));
                }
            }
        }