예제 #1
0
        public int CompareTo(object obj)
        {
            if (_jsonValue is ArrayJsonValue || _jsonValue is ObjectJsonValue)
            {
                return(1);
            }
            else if (obj is ArrayJsonValue || _jsonValue is ObjectJsonValue)
            {
                return(-1);
            }

            if (_jsonValue is NullValue && obj is NullValue)
            {
                return(0);
            }

            if (_jsonValue is NullValue)
            {
                return(1);
            }

            if (obj is NullValue)
            {
                return(-1);
            }

            if (obj is ConstantValue)
            {
                var other = (ConstantValue)obj;
                return(other.CompareTo(_jsonValue.Value) > 0 ? other.CompareTo(_jsonValue.Value) : other.CompareTo(_jsonValue.Value) * -1);
            }
            return(_jsonValue.CompareTo(obj));
        }
예제 #2
0
        //Need refactoring
        public static int Compare(IJsonValue jsonValue1, IJsonValue jsonValue2, bool forward = true, bool flipComparison = false)
        {
            int compValue;

            if (forward)
            {
                if (jsonValue1 is EmbeddedList)
                {
                    return(((EmbeddedList)jsonValue1).CompareLessThen(jsonValue2));
                }
                else if (jsonValue2 is EmbeddedList && flipComparison)
                {
                    return(((EmbeddedList)jsonValue2).CompareGreaterThen(jsonValue1) < 0 ? 1: 0);
                }
                compValue = jsonValue2.CompareTo(jsonValue1);
                return(compValue != 0 ? -1 * compValue : 0);
            }
            if (jsonValue2 is EmbeddedList)
            {
                return(jsonValue2.CompareTo(jsonValue1));
            }
            compValue = jsonValue1.CompareTo(jsonValue2);
            return(compValue != 0 ? -1 * compValue : 0);
        }
예제 #3
0
        public static bool Between(IJsonValue value1, IJsonValue value2, IJsonValue value3)
        {
            if (value1 is EmbeddedList || value2 is EmbeddedList)
            {
                if (Compare(value2, value1, true, true) <= 0)
                {
                    if (value3 is EmbeddedList)
                    {
                        if (Compare(value1, value3, true, true) <= 0)
                        {
                            return(true);
                        }
                    }

                    if (Compare(value1, value3) <= 0)
                    {
                        return(true);
                    }
                }
            }

            if (value2.CompareTo(value1) <= 0)
            {
                if (value3 is EmbeddedList)
                {
                    if (Compare(value1, value3) <= 0)
                    {
                        return(true);
                    }
                }

                if (value1.CompareTo(value3) <= 0)
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #4
0
        /// <summary>
        /// Returns a tuple of reduced JSON values.
        /// Bug: Greater than = Greater than equals to.
        /// </summary>
        private static Tuple <IJsonValue, IJsonValue> GetJSONValueRange(IEnumerable <ComparisonPredicate> expressions)
        {
            IJsonValue pin1 = NullValue.Null;
            IJsonValue pin2 = new ObjectJsonValue(new JSONDocument());

            foreach (var compareExpression in expressions)
            {
                //If pin1 is greater than pin2 the result set will be null.
                if (pin1.CompareTo(pin2) > 0)
                {
                    return(null);
                }

                IJsonValue value = compareExpression.ConstantValues[0];
                switch (compareExpression.Condition)
                {
                case Condition.Equals:
                case Condition.Like:
                    if (pin2.CompareTo(value) < 0 || pin1.CompareTo(value) > 0)
                    {
                        return(null);
                    }

                    pin2 = pin1 = value;
                    break;

                case Condition.GreaterThan:
                    if (value.CompareTo(pin2) >= 0)
                    {
                        return(null);
                    }

                    if (pin1.CompareTo(value) < 0)
                    {
                        pin1 = value;
                    }
                    break;

                case Condition.GreaterThanEqualTo:
                    if (value.CompareTo(pin2) > 0)
                    {
                        return(null);
                    }

                    if (pin1.CompareTo(value) < 0)
                    {
                        pin1 = value;
                    }
                    break;

                case Condition.LesserThan:
                    if (value.CompareTo(pin1) <= 0)
                    {
                        return(null);
                    }

                    if (pin2.CompareTo(value) > 0)
                    {
                        pin2 = value;
                    }
                    break;

                case Condition.LesserThanEqualTo:
                    if (value.CompareTo(pin1) < 0)
                    {
                        return(null);
                    }

                    if (pin2.CompareTo(value) > 0)
                    {
                        pin2 = value;
                    }
                    break;

                case Condition.Between:
                    //Both values could be equal.
                    if (value.CompareTo(pin2) > 0 ||
                        value.CompareTo(compareExpression.ConstantValues[0]) > 0)
                    {
                        return(null);
                    }
                    pin1 = value;
                    pin2 = compareExpression.ConstantValues[0];
                    break;

                case Condition.IsNull:
                    if (NullValue.Null.CompareTo(pin1) > 0)
                    {
                        return(null);
                    }

                    pin1 = pin2 = NullValue.Null;
                    break;

                case Condition.IsNotNull:
                    if (NullValue.Null.CompareTo(pin2) == 0)
                    {
                        return(null);
                    }

                    pin1 = new BooleanJsonValue(false);
                    break;

                case Condition.Exists:
                    break;

                case Condition.NotExists:
                    return(null);
                }
            }
            return(new Tuple <IJsonValue, IJsonValue>(pin1, pin2));
        }
예제 #5
0
        //Needs refactoring.
        public static bool Contains(IJsonValue value1, IJsonValue value2,
                                    IJSONDocument entry)
        {
            if (value2 is EmbeddedList)
            {
                foreach (var embeddedValue in ((EmbeddedList)value2).WrapedValue)
                {
                    if (embeddedValue is ArrayJsonValue)
                    {
                        if (value1 is EmbeddedList)
                        {
                            foreach (var value in ((EmbeddedList)value1).WrapedValue)
                            {
                                if (((ArrayJsonValue)embeddedValue).Contains(value))
                                {
                                    return(true);
                                }
                            }
                        }

                        if (((ArrayJsonValue)embeddedValue).Contains(value1))
                        {
                            return(true);
                        }
                    }
                }
                return(false);
            }

            if (value2 is ValueList)
            {
                if (value1 is EmbeddedList)
                {
                    //if (((ValueList)value2).Contains(value1 as EmbeddedList))
                    IJsonValue[] ijsonValues2 = ((ValueList)value2).Value as IJsonValue[];
                    if (ijsonValues2 == null)
                    {
                        return(false);
                    }
                    foreach (var ijsonValue in ijsonValues2)
                    {
                        bool isMatchFound = false;
                        if (ijsonValue is ArrayJsonValue)
                        {
                            foreach (var value in ((EmbeddedList)value1).WrapedValue)
                            {
                                if (((ArrayJsonValue)ijsonValue).Contains(value))
                                {
                                    isMatchFound = true;
                                }
                                else
                                {
                                    continue;
                                }
                            }
                            if (isMatchFound)
                            {
                                return(true);
                            }
                        }
                        else
                        {
                            if (ijsonValue.CompareTo(value1) == 0)
                            {
                                return(true);
                            }
                        }
                    }
                    return(false);
                }
                return(!((ValueList)value2).Contains(entry, value1));
            }

            if (value2 is ArrayJsonValue)
            {
                if (value1 is EmbeddedList)
                {
                    if (value2.CompareTo(value1) == 0)
                    {
                        return(true);
                    }
                    return(false);
                }

                return(!((ArrayJsonValue)value2).Contains(value1));
            }

            return(false);
        }