Example #1
0
        /// <summary>
        /// Parses a single query
        /// </summary>
        /// <param name="query">Query to be parsed</param>
        /// <returns></returns>
        private ObjectQueryCondition ParseSingleQuery(string query)
        {
            ObjectQueryCondition oqc;

            try
            {
                oqc = new ObjectQueryCondition();

                //split the query
                string[] parts = this.SliceStringByContext(query, " ", VALUE_START_CHAR.ToString(), VALUE_END_CHAR.ToString());

                if (parts.Length == QUERY_LENGTH)
                {
                    oqc.FieldName = parts[0];
                    oqc.Operator  = GetOperator(parts[1]);
                    oqc.Value     = this.Strip(parts[2]);
                }
                else if (parts.Length == EXTENDED_QUERY_LENGTH)
                {
                    oqc.FieldName      = parts[0];
                    oqc.Operator       = GetOperator(parts[1]);
                    oqc.Value          = this.Strip(parts[2]);
                    oqc.SecondaryValue = this.Strip(parts[3]);

                    //check the operator
                    if (oqc.Operator != CriteriaOperator.Between)
                    {
                        throw new ArgumentException("Invalid operator or arguments for query " + query);
                    }
                }

                return(oqc);
            }
            catch
            {
                throw;
            }
        }
Example #2
0
        /// <summary>
        /// Parses the specified condition
        /// </summary>
        /// <param name="condition">object query condition</param>
        /// <returns>List of query conditions</returns>
        internal List <ObjectQueryCondition> Parse(string condition)
        {
            List <string> arguments = null;
            List <ObjectQueryCondition> listObjectQuery = null;
            List <string> listQueryComponents           = null;

            try
            {
                arguments           = new List <string>();
                listObjectQuery     = new List <ObjectQueryCondition>();
                listQueryComponents = new List <string>();

                //split the string in multiple queries
                string[] results = this.SliceStringByContext(condition, QUERY_SEPARATOR, VALUE_START_CHAR.ToString(), VALUE_END_CHAR.ToString());


                foreach (string var in results)
                {
                    //we have a conditional query. Now try to see if we have OR conditions inside it.
                    string[] queryParts = this.SliceStringByContext(var, CONDITION_SEPARATOR, VALUE_START_CHAR.ToString(), VALUE_END_CHAR.ToString());

                    if (queryParts.Length > 0)
                    {
                        ObjectQueryCondition oqc = new ObjectQueryCondition();

                        for (int i = 0; i < queryParts.Length; i++)
                        {
                            if (i == 0)
                            {
                                oqc = this.ParseSingleQuery(queryParts[i]);

                                //check if we have multiple OR queries
                                if (queryParts.Length > 1)
                                {
                                    //lazy initialization for "OR" list. There is no point in initializing it
                                    //for a single value
                                    oqc.ListConditions = new List <ObjectQueryCondition>();
                                }
                            }
                            else
                            {
                                oqc.ListConditions.Add(this.ParseSingleQuery(queryParts[i]));
                            }
                        }

                        listObjectQuery.Add(oqc);
                    }
                    else
                    {
                        //we have a single condition so just add it
                        listObjectQuery.Add(this.ParseSingleQuery(var));
                    }
                }

                return(listObjectQuery);
            }
            catch (Exception ex)
            {
                throw new ArgumentException(ex.Message, ex);
            }
        }