CPS-1215 OR operator changes
References
CPS-1215: Add OR operation for CPS PathClosed
Query data node using cps-path
1.Using AND condition
In query of data node, when we can combine two leaf elements using “AND” condition this would give result only if both leaf values are under same list. Below are the examples:
Here cps-path //books[@pub_year=1994 and @price=895]
Since, pub_year=1994 and price=895 are under same list it gives the response
Similarly when cps-path //books[@pub_year=1994 and @price=1099]
Since, pub_year=1994 and price=1099 are under different list it gives the empty response
2.Using OR condition
In order to search across the Json data here with multiple attributes under different lists OR condition is used.
we can combine two leaf elements using “OR” condition this would give result. Below are the examples:
Here cps-path //books[@pub_year=1994 or @price=1099]]
pub_year=1994 and price=1099 are under different list it gives the required response
Here cps-path //books[@pub_year=1994 or @price=895 or @title="Far Horizons"]
multiple attributes pub_year=1994 and price=895 and title=Far Horizons are under different list it gives the required response
Also cps-path //books[@price=895 or @title="xyz"]
attribute has non-json value price=895 and title="
//books[@pub_year=1994 or @price=895 or @title="Far Horizons"]
Implementation of OR Operator
1.Update antlr parser to recognize OR in leaf-condition
2.Implement required (native) query
3.Add Integration tests for
a.filter on mix of string and integer leaf-values
b.filter on non-json data
c.filter on combination of multiple AND's as well as OR's
4.Update documentation
5.demo to team
Query used : SELECT * FROM FRAGMENT WHERE anchor_id = :anchorId AND xpath ~ :xpathRegex AND ( attributes @> '{"price":895}' or attributes @> '{"title":"Far Horizons"}')
Limitations
1.Since leaf are stored in Hashmap same keys are not supported, unique keys only supports.
2.Only leaves can be used, leaf-list are not supported
3.Only string and integer values are supported, boolean and float values are not supported.
4.Multiple attributes can only be combined using AND, OR , multiple AND's , multiple OR's and bracketing is not supported.
5.Also the order of leaf elements in the map is not preserved , so combination of And/Or would not give expected result. Currently working on the ordering of leaf elements to give proper support for combination of and/or CPS-1629.