CPS-1273 Support for <,> Operators in cps-path
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] | Json Response[
{
"book-store:books": {
"lang": "English",
"price": 10,
"title": "Matilda",
"authors": [
"Roald Dahl"
],
"editions": [
1988,
2000
]
}
},
{
"book-store:books": {
"lang": "English",
"price": 14,
"title": "The Light Fantastic",
"authors": [
"Terry Pratchett"
],
"editions": [
1986
]
}
},
{
"book-store:books": {
"lang": "English",
"price": 12,
"title": "The Colour of Magic",
"authors": [
"Terry Pratchett"
],
"editions": [
1983
]
}
},
{
"book-store:books": {
"lang": "English",
"price": 13,
"title": "Good Omens",
"authors": [
"Terry Pratchett",
"Neil Gaiman"
],
"editions": [
2006
]
}
},
{
"book-store:books": {
"lang": "N/A",
"price": 11,
"title": "Logarithm tables",
"authors": [
"Joe Bloggs"
],
"editions": [
2009
]
}
}
]
|
2 | Using "<" with OR condition cps-path : //books[@price<10 or @lang="German"] | Json Response[
{
"book-store:books": {
"lang": "German",
"price": 39,
"title": "Debian GNU/Linux",
"authors": [
"Peter H. Ganten",
"Wulf Alex"
],
"editions": [
2013,
2021,
2007
]
}
}
]
|
3 | Using ">" with AND condition cps-path : //books[@price>13 and @title="A Book with No Language"] | Json Response [
{
"book-store:books": {
"lang": "",
"price": 20,
"title": "A Book with No Language",
"authors": [
"Joe Bloggs"
],
"editions": [
2023
]
}
}
] |
4 | Using ">=" with combination of OR/AND condition cps-path : //books[@price>=13 or @lang="Spanish" and @title="Good Omens"] | Json Response |
5 | Using "<=" with combination of AND/OR condition cps-path : //books[@price<=15 and @title="Annihilation" or @lang="Spanish"] | Json Response |
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.