public void AndExpressionTest() { CompositeExpression compositeExpression = new CompositeExpression { Operator = QueryOperator.And, Expressions = new List<QueryExpression> { new BooleanQueryExpression { Operator = QueryOperator.Exists, Path = new List<PathFilter> { new FieldFilter { Name = "FirstName" } } }, new BooleanQueryExpression { Operator = QueryOperator.Exists, Path = new List<PathFilter> { new FieldFilter { Name = "LastName" } } } } }; JObject o1 = new JObject { {"Title","Title!"}, {"FirstName", "FirstName!"}, {"LastName", "LastName!"} }; Assert.IsTrue(compositeExpression.IsMatch(o1)); JObject o2 = new JObject { {"Title","Title!"}, {"FirstName", "FirstName!"} }; Assert.IsFalse(compositeExpression.IsMatch(o2)); JObject o3 = new JObject { {"Title","Title!"} }; Assert.IsFalse(compositeExpression.IsMatch(o3)); }
private QueryExpression ParseExpression() { QueryExpression rootExpression = null; CompositeExpression parentExpression = null; while (_currentIndex < _expression.Length) { object left = ParseSide(); object right = null; QueryOperator op; if (_expression[_currentIndex] == ')' || _expression[_currentIndex] == '|' || _expression[_currentIndex] == '&') { op = QueryOperator.Exists; } else { op = ParseOperator(); right = ParseSide(); } BooleanQueryExpression booleanExpression = new BooleanQueryExpression(op, left, right); if (_expression[_currentIndex] == ')') { if (parentExpression != null) { parentExpression.Expressions.Add(booleanExpression); return(rootExpression); } return(booleanExpression); } if (_expression[_currentIndex] == '&') { if (!Match("&&")) { throw CreateUnexpectedCharacterException(); } if (parentExpression == null || parentExpression.Operator != QueryOperator.And) { CompositeExpression andExpression = new CompositeExpression(QueryOperator.And); parentExpression?.Expressions.Add(andExpression); parentExpression = andExpression; if (rootExpression == null) { rootExpression = parentExpression; } } parentExpression.Expressions.Add(booleanExpression); } if (_expression[_currentIndex] == '|') { if (!Match("||")) { throw CreateUnexpectedCharacterException(); } if (parentExpression == null || parentExpression.Operator != QueryOperator.Or) { CompositeExpression orExpression = new CompositeExpression(QueryOperator.Or); parentExpression?.Expressions.Add(orExpression); parentExpression = orExpression; if (rootExpression == null) { rootExpression = parentExpression; } } parentExpression.Expressions.Add(booleanExpression); } } throw new JsonException("Path ended with open query."); }
private QueryExpression ParseExpression() { QueryExpression rootExpression = null; CompositeExpression parentExpression = null; while (_currentIndex < _expression.Length) { EatWhitespace(); if (_expression[_currentIndex] != '@') { throw new JsonException("Unexpected character while parsing path query: " + _expression[_currentIndex]); } _currentIndex++; List <PathFilter> expressionPath = new List <PathFilter>(); if (ParsePath(expressionPath, _currentIndex, true)) { throw new JsonException("Path ended with open query."); } EatWhitespace(); EnsureLength("Path ended with open query."); QueryOperator op; object value = null; if (_expression[_currentIndex] == ')' || _expression[_currentIndex] == '|' || _expression[_currentIndex] == '&') { op = QueryOperator.Exists; } else { op = ParseOperator(); EatWhitespace(); EnsureLength("Path ended with open query."); value = ParseValue(); EatWhitespace(); EnsureLength("Path ended with open query."); } BooleanQueryExpression booleanExpression = new BooleanQueryExpression { Path = expressionPath, Operator = op, Value = (op != QueryOperator.Exists) ? new JValue(value) : null }; if (_expression[_currentIndex] == ')') { if (parentExpression != null) { parentExpression.Expressions.Add(booleanExpression); return(rootExpression); } return(booleanExpression); } if (_expression[_currentIndex] == '&' && Match("&&")) { if (parentExpression == null || parentExpression.Operator != QueryOperator.And) { CompositeExpression andExpression = new CompositeExpression { Operator = QueryOperator.And }; if (parentExpression != null) { parentExpression.Expressions.Add(andExpression); } parentExpression = andExpression; if (rootExpression == null) { rootExpression = parentExpression; } } parentExpression.Expressions.Add(booleanExpression); } if (_expression[_currentIndex] == '|' && Match("||")) { if (parentExpression == null || parentExpression.Operator != QueryOperator.Or) { CompositeExpression orExpression = new CompositeExpression { Operator = QueryOperator.Or }; if (parentExpression != null) { parentExpression.Expressions.Add(orExpression); } parentExpression = orExpression; if (rootExpression == null) { rootExpression = parentExpression; } } parentExpression.Expressions.Add(booleanExpression); } } throw new JsonException("Path ended with open query."); }
private QueryExpression ParseExpression() { QueryOperator queryOperator; JValue jValue; QueryExpression queryExpression = null; CompositeExpression compositeExpression = null; while (this._currentIndex < this._expression.Length) { this.EatWhitespace(); if (this._expression[this._currentIndex] != '@') { char chr = this._expression[this._currentIndex]; throw new JsonException(string.Concat("Unexpected character while parsing path query: ", chr.ToString())); } this._currentIndex++; List <PathFilter> pathFilters = new List <PathFilter>(); if (this.ParsePath(pathFilters, this._currentIndex, true)) { throw new JsonException("Path ended with open query."); } this.EatWhitespace(); this.EnsureLength("Path ended with open query."); object obj = null; if (this._expression[this._currentIndex] == ')' || this._expression[this._currentIndex] == '|' || this._expression[this._currentIndex] == '&') { queryOperator = QueryOperator.Exists; } else { queryOperator = this.ParseOperator(); this.EatWhitespace(); this.EnsureLength("Path ended with open query."); obj = this.ParseValue(); this.EatWhitespace(); this.EnsureLength("Path ended with open query."); } BooleanQueryExpression booleanQueryExpression = new BooleanQueryExpression() { Path = pathFilters, Operator = queryOperator }; if (queryOperator != QueryOperator.Exists) { jValue = new JValue(obj); } else { jValue = null; } booleanQueryExpression.Value = jValue; BooleanQueryExpression booleanQueryExpression1 = booleanQueryExpression; if (this._expression[this._currentIndex] == ')') { if (compositeExpression == null) { return(booleanQueryExpression1); } compositeExpression.Expressions.Add(booleanQueryExpression1); return(queryExpression); } if (this._expression[this._currentIndex] == '&' && this.Match("&&")) { if (compositeExpression == null || compositeExpression.Operator != QueryOperator.And) { CompositeExpression compositeExpression1 = new CompositeExpression() { Operator = QueryOperator.And }; if (compositeExpression != null) { compositeExpression.Expressions.Add(compositeExpression1); } compositeExpression = compositeExpression1; if (queryExpression == null) { queryExpression = compositeExpression; } } compositeExpression.Expressions.Add(booleanQueryExpression1); } if (this._expression[this._currentIndex] != '|' || !this.Match("||")) { continue; } if (compositeExpression == null || compositeExpression.Operator != QueryOperator.Or) { CompositeExpression compositeExpression2 = new CompositeExpression() { Operator = QueryOperator.Or }; if (compositeExpression != null) { compositeExpression.Expressions.Add(compositeExpression2); } compositeExpression = compositeExpression2; if (queryExpression == null) { queryExpression = compositeExpression; } } compositeExpression.Expressions.Add(booleanQueryExpression1); } throw new JsonException("Path ended with open query."); }
private QueryExpression ParseExpression() { QueryOperator queryOperator; QueryExpression queryExpression = null; CompositeExpression compositeExpression = null; while (this._currentIndex < this._expression.Length) { object obj = this.ParseSide(); object obj1 = null; if (this._expression[this._currentIndex] != ')' && this._expression[this._currentIndex] != '|') { if (this._expression[this._currentIndex] == '&') { goto Label2; } queryOperator = this.ParseOperator(); obj1 = this.ParseSide(); goto Label0; } Label2: queryOperator = QueryOperator.Exists; Label0: BooleanQueryExpression booleanQueryExpression = new BooleanQueryExpression() { Left = obj, Operator = queryOperator, Right = obj1 }; BooleanQueryExpression booleanQueryExpression1 = booleanQueryExpression; if (this._expression[this._currentIndex] == ')') { if (compositeExpression == null) { return(booleanQueryExpression1); } compositeExpression.Expressions.Add(booleanQueryExpression1); return(queryExpression); } if (this._expression[this._currentIndex] == '&') { if (!this.Match("&&")) { throw this.CreateUnexpectedCharacterException(); } if (compositeExpression == null || compositeExpression.Operator != QueryOperator.And) { CompositeExpression compositeExpression1 = new CompositeExpression() { Operator = QueryOperator.And }; if (compositeExpression != null) { compositeExpression.Expressions.Add(compositeExpression1); } compositeExpression = compositeExpression1; if (queryExpression == null) { queryExpression = compositeExpression; } } compositeExpression.Expressions.Add(booleanQueryExpression1); } if (this._expression[this._currentIndex] != '|') { continue; } if (!this.Match("||")) { throw this.CreateUnexpectedCharacterException(); } if (compositeExpression == null || compositeExpression.Operator != QueryOperator.Or) { CompositeExpression compositeExpression2 = new CompositeExpression() { Operator = QueryOperator.Or }; if (compositeExpression != null) { compositeExpression.Expressions.Add(compositeExpression2); } compositeExpression = compositeExpression2; if (queryExpression == null) { queryExpression = compositeExpression; } } compositeExpression.Expressions.Add(booleanQueryExpression1); } throw new JsonException("Path ended with open query."); }
private QueryExpression ParseExpression() { QueryExpression rootExpression = null; CompositeExpression parentExpression = null; while (_currentIndex < _expression.Length) { EatWhitespace(); if (_expression[_currentIndex] != '@') throw new JsonException("Unexpected character while parsing path query: " + _expression[_currentIndex]); _currentIndex++; List<PathFilter> expressionPath = new List<PathFilter>(); if (ParsePath(expressionPath, _currentIndex, true)) throw new JsonException("Path ended with open query."); EatWhitespace(); EnsureLength("Path ended with open query."); QueryOperator op; object value = null; if (_expression[_currentIndex] == ')' || _expression[_currentIndex] == '|' || _expression[_currentIndex] == '&') { op = QueryOperator.Exists; } else { op = ParseOperator(); EatWhitespace(); EnsureLength("Path ended with open query."); value = ParseValue(); EatWhitespace(); EnsureLength("Path ended with open query."); } BooleanQueryExpression booleanExpression = new BooleanQueryExpression { Path = expressionPath, Operator = op, Value = (op != QueryOperator.Exists) ? new JValue(value) : null }; if (_expression[_currentIndex] == ')') { if (parentExpression != null) { parentExpression.Expressions.Add(booleanExpression); return rootExpression; } return booleanExpression; } if (_expression[_currentIndex] == '&' && Match("&&")) { if (parentExpression == null || parentExpression.Operator != QueryOperator.And) { CompositeExpression andExpression = new CompositeExpression { Operator = QueryOperator.And }; if (parentExpression != null) parentExpression.Expressions.Add(andExpression); parentExpression = andExpression; if (rootExpression == null) rootExpression = parentExpression; } parentExpression.Expressions.Add(booleanExpression); } if (_expression[_currentIndex] == '|' && Match("||")) { if (parentExpression == null || parentExpression.Operator != QueryOperator.Or) { CompositeExpression orExpression = new CompositeExpression { Operator = QueryOperator.Or }; if (parentExpression != null) parentExpression.Expressions.Add(orExpression); parentExpression = orExpression; if (rootExpression == null) rootExpression = parentExpression; } parentExpression.Expressions.Add(booleanExpression); } } throw new JsonException("Path ended with open query."); }
private QueryExpression ParseExpression() { QueryExpression queryExpression = null; CompositeExpression compositeExpression = null; while (this._currentIndex < this._expression.Length) { this.EatWhitespace(); if (this._expression[this._currentIndex] != '@') { throw new JsonException("Unexpected character while parsing path query: " + this._expression[this._currentIndex]); } this._currentIndex++; List <PathFilter> list = new List <PathFilter>(); if (this.ParsePath(list, this._currentIndex, true)) { throw new JsonException("Path ended with open query."); } this.EatWhitespace(); this.EnsureLength("Path ended with open query."); object value = null; QueryOperator queryOperator; if (this._expression[this._currentIndex] == ')' || this._expression[this._currentIndex] == '|' || this._expression[this._currentIndex] == '&') { queryOperator = QueryOperator.Exists; } else { queryOperator = this.ParseOperator(); this.EatWhitespace(); this.EnsureLength("Path ended with open query."); value = this.ParseValue(); this.EatWhitespace(); this.EnsureLength("Path ended with open query."); } BooleanQueryExpression booleanQueryExpression = new BooleanQueryExpression { Path = list, Operator = queryOperator, Value = (queryOperator != QueryOperator.Exists) ? new JValue(value) : null }; if (this._expression[this._currentIndex] == ')') { if (compositeExpression != null) { compositeExpression.Expressions.Add(booleanQueryExpression); return(queryExpression); } return(booleanQueryExpression); } else { if (this._expression[this._currentIndex] == '&' && this.Match("&&")) { if (compositeExpression == null || compositeExpression.Operator != QueryOperator.And) { CompositeExpression compositeExpression2 = new CompositeExpression { Operator = QueryOperator.And }; if (compositeExpression != null) { compositeExpression.Expressions.Add(compositeExpression2); } compositeExpression = compositeExpression2; if (queryExpression == null) { queryExpression = compositeExpression; } } compositeExpression.Expressions.Add(booleanQueryExpression); } if (this._expression[this._currentIndex] == '|' && this.Match("||")) { if (compositeExpression == null || compositeExpression.Operator != QueryOperator.Or) { CompositeExpression compositeExpression3 = new CompositeExpression { Operator = QueryOperator.Or }; if (compositeExpression != null) { compositeExpression.Expressions.Add(compositeExpression3); } compositeExpression = compositeExpression3; if (queryExpression == null) { queryExpression = compositeExpression; } } compositeExpression.Expressions.Add(booleanQueryExpression); } } } throw new JsonException("Path ended with open query."); }
private QueryExpression ParseExpression() { QueryExpression expression = null; CompositeExpression expression2 = null; while (this._currentIndex < this._expression.Length) { QueryOperator exists; this.EatWhitespace(); if (this._expression[this._currentIndex] != '@') { char ch = this._expression[this._currentIndex]; throw new JsonException("Unexpected character while parsing path query: " + ch.ToString()); } this._currentIndex++; List <PathFilter> filters = new List <PathFilter>(); if (this.ParsePath(filters, this._currentIndex, true)) { throw new JsonException("Path ended with open query."); } this.EatWhitespace(); this.EnsureLength("Path ended with open query."); object obj2 = null; if (((this._expression[this._currentIndex] == ')') || (this._expression[this._currentIndex] == '|')) || (this._expression[this._currentIndex] == '&')) { exists = QueryOperator.Exists; } else { exists = this.ParseOperator(); this.EatWhitespace(); this.EnsureLength("Path ended with open query."); obj2 = this.ParseValue(); this.EatWhitespace(); this.EnsureLength("Path ended with open query."); } BooleanQueryExpression item = new BooleanQueryExpression { Path = filters, Operator = exists, Value = (exists != QueryOperator.Exists) ? new JValue(obj2) : null }; if (this._expression[this._currentIndex] == ')') { if (expression2 != null) { expression2.Expressions.Add(item); return(expression); } return(item); } if ((this._expression[this._currentIndex] == '&') && this.Match("&&")) { if ((expression2 == null) || (expression2.Operator != QueryOperator.And)) { CompositeExpression expression4 = new CompositeExpression { Operator = QueryOperator.And }; if (expression2 != null) { expression2.Expressions.Add(expression4); } expression2 = expression4; if (expression == null) { expression = expression2; } } expression2.Expressions.Add(item); } if ((this._expression[this._currentIndex] == '|') && this.Match("||")) { if ((expression2 == null) || (expression2.Operator != QueryOperator.Or)) { CompositeExpression expression5 = new CompositeExpression { Operator = QueryOperator.Or }; if (expression2 != null) { expression2.Expressions.Add(expression5); } expression2 = expression5; if (expression == null) { expression = expression2; } } expression2.Expressions.Add(item); } } throw new JsonException("Path ended with open query."); }
// Token: 0x0600145A RID: 5210 RVA: 0x0006BA30 File Offset: 0x00069C30 private QueryExpression ParseExpression() { QueryExpression queryExpression = null; CompositeExpression compositeExpression = null; while (this._currentIndex < this._expression.Length) { object left = this.ParseSide(); object right = null; QueryOperator @operator; if (this._expression[this._currentIndex] == ')' || this._expression[this._currentIndex] == '|' || this._expression[this._currentIndex] == '&') { @operator = QueryOperator.Exists; } else { @operator = this.ParseOperator(); right = this.ParseSide(); } BooleanQueryExpression booleanQueryExpression = new BooleanQueryExpression(@operator, left, right); if (this._expression[this._currentIndex] == ')') { if (compositeExpression != null) { compositeExpression.Expressions.Add(booleanQueryExpression); return(queryExpression); } return(booleanQueryExpression); } else { if (this._expression[this._currentIndex] == '&') { if (!this.Match("&&")) { throw this.CreateUnexpectedCharacterException(); } if (compositeExpression == null || compositeExpression.Operator != QueryOperator.And) { CompositeExpression compositeExpression2 = new CompositeExpression(QueryOperator.And); if (compositeExpression != null) { compositeExpression.Expressions.Add(compositeExpression2); } compositeExpression = compositeExpression2; if (queryExpression == null) { queryExpression = compositeExpression; } } compositeExpression.Expressions.Add(booleanQueryExpression); } if (this._expression[this._currentIndex] == '|') { if (!this.Match("||")) { throw this.CreateUnexpectedCharacterException(); } if (compositeExpression == null || compositeExpression.Operator != QueryOperator.Or) { CompositeExpression compositeExpression3 = new CompositeExpression(QueryOperator.Or); if (compositeExpression != null) { compositeExpression.Expressions.Add(compositeExpression3); } compositeExpression = compositeExpression3; if (queryExpression == null) { queryExpression = compositeExpression; } } compositeExpression.Expressions.Add(booleanQueryExpression); } } } throw new JsonException("Path ended with open query."); }
// Token: 0x0600024D RID: 589 // RVA: 0x0002DFF8 File Offset: 0x0002C1F8 private QueryExpression ParseExpression() { QueryExpression queryExpression = null; CompositeExpression compositeExpression = null; while (this._currentIndex < this._expression.Length) { this.EatWhitespace(); if (this._expression[this._currentIndex] != '@') { throw new JsonException("Unexpected character while parsing path query: " + this._expression[this._currentIndex]); } this._currentIndex++; List<PathFilter> list = new List<PathFilter>(); if (!this.ParsePath(list, this._currentIndex, true)) { this.EatWhitespace(); this.EnsureLength("Path ended with open query."); object value = null; if (this._expression[this._currentIndex] == ')' || this._expression[this._currentIndex] == '|') { goto IL_D8; } if (this._expression[this._currentIndex] == '&') { goto IL_D8; } QueryOperator queryOperator = this.ParseOperator(); this.EatWhitespace(); this.EnsureLength("Path ended with open query."); value = this.ParseValue(); this.EatWhitespace(); this.EnsureLength("Path ended with open query."); IL_DA: BooleanQueryExpression booleanQueryExpression = new BooleanQueryExpression { Path = list, Operator = queryOperator, Value = ((queryOperator != QueryOperator.Exists) ? new JValue(value) : null) }; if (this._expression[this._currentIndex] == ')') { if (compositeExpression != null) { compositeExpression.Expressions.Add(booleanQueryExpression); return queryExpression; } return booleanQueryExpression; } else { if (this._expression[this._currentIndex] == '&' && this.Match("&&")) { if (compositeExpression == null || compositeExpression.Operator != QueryOperator.And) { CompositeExpression compositeExpression2 = new CompositeExpression { Operator = QueryOperator.And }; if (compositeExpression != null) { compositeExpression.Expressions.Add(compositeExpression2); } compositeExpression = compositeExpression2; if (queryExpression == null) { queryExpression = compositeExpression; } } compositeExpression.Expressions.Add(booleanQueryExpression); } if (this._expression[this._currentIndex] == '|' && this.Match("||")) { if (compositeExpression == null || compositeExpression.Operator != QueryOperator.Or) { CompositeExpression compositeExpression3 = new CompositeExpression { Operator = QueryOperator.Or }; if (compositeExpression != null) { compositeExpression.Expressions.Add(compositeExpression3); } compositeExpression = compositeExpression3; if (queryExpression == null) { queryExpression = compositeExpression; } } compositeExpression.Expressions.Add(booleanQueryExpression); continue; } continue; } IL_D8: queryOperator = QueryOperator.Exists; goto IL_DA; } throw new JsonException("Path ended with open query."); } throw new JsonException("Path ended with open query."); }
private QueryExpression ParseExpression() { QueryExpression queryExpression = (QueryExpression)null; CompositeExpression compositeExpression1 = (CompositeExpression)null; while (this._currentIndex < this._expression.Length) { this.EatWhitespace(); if (this._expression[this._currentIndex] != '@') { throw new JsonException("Unexpected character while parsing path query: " + this._expression[this._currentIndex].ToString()); } ++this._currentIndex; List <PathFilter> filters = new List <PathFilter>(); if (this.ParsePath(filters, this._currentIndex, true)) { throw new JsonException("Path ended with open query."); } this.EatWhitespace(); this.EnsureLength("Path ended with open query."); object obj = (object)null; QueryOperator queryOperator; if (this._expression[this._currentIndex] == ')' || this._expression[this._currentIndex] == '|' || this._expression[this._currentIndex] == '&') { queryOperator = QueryOperator.Exists; } else { queryOperator = this.ParseOperator(); this.EatWhitespace(); this.EnsureLength("Path ended with open query."); obj = this.ParseValue(); this.EatWhitespace(); this.EnsureLength("Path ended with open query."); } BooleanQueryExpression booleanQueryExpression1 = new BooleanQueryExpression(); booleanQueryExpression1.Path = filters; booleanQueryExpression1.Operator = queryOperator; booleanQueryExpression1.Value = queryOperator != QueryOperator.Exists ? new JValue(obj) : (JValue)null; BooleanQueryExpression booleanQueryExpression2 = booleanQueryExpression1; if (this._expression[this._currentIndex] == ')') { if (compositeExpression1 == null) { return((QueryExpression)booleanQueryExpression2); } compositeExpression1.Expressions.Add((QueryExpression)booleanQueryExpression2); return(queryExpression); } if (this._expression[this._currentIndex] == '&' && this.Match("&&")) { if (compositeExpression1 == null || compositeExpression1.Operator != QueryOperator.And) { CompositeExpression compositeExpression2 = new CompositeExpression(); compositeExpression2.Operator = QueryOperator.And; CompositeExpression compositeExpression3 = compositeExpression2; compositeExpression1?.Expressions.Add((QueryExpression)compositeExpression3); compositeExpression1 = compositeExpression3; if (queryExpression == null) { queryExpression = (QueryExpression)compositeExpression1; } } compositeExpression1.Expressions.Add((QueryExpression)booleanQueryExpression2); } if (this._expression[this._currentIndex] == '|' && this.Match("||")) { if (compositeExpression1 == null || compositeExpression1.Operator != QueryOperator.Or) { CompositeExpression compositeExpression2 = new CompositeExpression(); compositeExpression2.Operator = QueryOperator.Or; CompositeExpression compositeExpression3 = compositeExpression2; compositeExpression1?.Expressions.Add((QueryExpression)compositeExpression3); compositeExpression1 = compositeExpression3; if (queryExpression == null) { queryExpression = (QueryExpression)compositeExpression1; } } compositeExpression1.Expressions.Add((QueryExpression)booleanQueryExpression2); } } throw new JsonException("Path ended with open query."); }