示例#1
0
        private static bool ParseJObjectOperationTokenExpression(string query, out IJObjectTokenExpression expression)
        {
            expression = null;

            //only worth checking if string length > 3 (ie 1=1)
            if (query.Length <= 2)
            {
                return(false);
            }
            for (var i = 0; i < query.Length - 1; i++)
            {
                if (Comparators.Contains(query.Substring(i, 2))) //check current and next char
                {
                    {
                        expression = new JObjectOperationTokenExpression(query.Substring(0, i), query.Substring(i, 2), query.Substring(i + 2));
                        return(true);
                    }
                }

                if (Comparators.Contains(query.Substring(i, 1))) //check current and next char
                {
                    {
                        expression = new JObjectOperationTokenExpression(query.Substring(0, i), query.Substring(i, 1), query.Substring(i + 1));
                        return(true);
                    }
                }
            }

            return(false);
        }
示例#2
0
        private static bool ParseJObjectLogicalOperationTokenExpression(string query, out IJObjectTokenExpression expression)
        {
            expression = null;

            //need to on finding a bracket keep going until we find the end bracket then set that as a value logic
            //the value logic can then be used and evaluated in the same way
            var bracketCount  = 0;
            var inArrayAction = 0;

            //split & | operators
            for (var i = 0; i < query.Length; i++)
            {
                var charValue = query[i];

                //handle brackets to ignore nested &|
                bracketCount  += charValue == '(' ? 1 : 0;
                bracketCount  -= charValue == ')' ? 1 : 0;
                inArrayAction += charValue == '[' ? 1 : 0;
                inArrayAction -= charValue == ']' ? 1 : 0;

                //if its not a logic operator outside of brackets carry on
                if (!Operators.Contains(charValue) || bracketCount != 0 || inArrayAction != 0)
                {
                    continue;
                }

                var l = query[new Range(0, i)];
                var o = charValue.ToString();
                var r = query[new Range(i + 1, query.Length)];
                {
                    expression = new JObjectOperationTokenExpression(l, o, r);
                    return(true);
                }
            }

            return(false);
        }