Add OR operator to cps-path
steps to be followed :
- Antlr grammer file changes should be made to recognise OR
- Implement the code logic in order to add OR functionality
- Add test cases
- Update documentation
- Demo to team
Here following are the antlr changes which made to recognise the OR
So, Cps has and condition which is applied with leaf condition ,similarly we have added or to the antlr
path :cps-path-parser/src/main/antlr4/org/onap/cps/cpspath/parser/antlr4/CpsPath.g4
listElementRef : OB leafCondition ( ( KW_AND | KW_OR) leafCondition)* CB
multipleLeafConditions : OB leafCondition ( ( KW_AND | KW_OR) leafCondition)* CB
The problem is we are unable to find the logic how and condition has been implemented , like is there any query written for it.
Also found there is class path :cps-path-parser/src/main/java/org/onap/cps/cpspath/parser/CpsPathBuilder.java ,here found that they used and as append condition but this doesn't seems like the logic implementation.
So, would like to get help with it.
to-do:
Need to implement the logic for OR Operation
But there are few doubts regarding this to be discussed
Table of Contents |
---|
References
Query data node using cps-path
In query of data node, when we can query using <,>,>=,<= comparative operators . Also we can combine “AND/OR” conditions with comparative operators . Below are the some examples
Comparative Operators Condition
# | cps-path | Output | |||||||
---|---|---|---|---|---|---|---|---|---|
1 | Using "<" condition cps-path : //books[@price<15] |
| |||||||
2 | Using "<" with OR condition cps-path : //books[@price<10 or @lang="German"] |
| |||||||
3 | Using ">" with AND condition cps-path : //books[@price>13 and @title="A Book with No Language"] |
| |||||||
4 | Using ">=" with combination of OR/AND condition cps-path : //books[@price>=13 or @lang="Spanish" and @title="Good Omens"] |
| |||||||
5 | Using "<=" with combination of AND/OR condition cps-path : //books[@price<=15 and @title="Annihilation" or @lang="Spanish"] |
|
Implementation of Comparative Operator
1.Update antlr parser to recognize <,>,<=,>= in leaf-condition
2.Implement required (native) query
3.Add Integration tests for comparative operators
4.Update documentation
5.demo to team
Query used : SELECT * FROM fragment WHERE anchor_id = :anchorId AND xpath ~ :xpathRegex AND ((attributes ->> 'price')\:\:int > '13' and attributes @> '{"title":"A Book with No Language"}')
Limitations
1.Using comparative operators with string values will lead to an error at runtime. This error can't be validated earlier as the datatype is unknown until the execution phase.