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)); }
//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); }
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); }
/// <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)); }
//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); }