Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

References

CPS-1273

Query data node using cps-path

Comparative Operators Condition

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]


Code Block
titleJson Response
collapsetrue
[
    {
        "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"]


Code Block
titleJson Response
collapsetrue
[
    {
        "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"]


Code Block
titleJson Response
collapsetrue
 [
    {
        "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"]


Code Block
titleJson Response
collapsetrue
[
    {
        "book-store:books": {
            "lang": "English",
            "price": 15,
            "title": "The Gruffalo",
            "authors": [
                "Julia Donaldson"
            ],
            "editions": [
                1999
            ]
        }
    },
    {
        "book-store:books": {
            "lang": "English",
            "price": 15,
            "title": "Annihilation",
            "authors": [
                "Jeff VanderMeer"
            ],
            "editions": [
                2014
            ]
        }
    },
    {
        "book-store:books": {
            "lang": "English",
            "price": 14,
            "title": "The Light Fantastic",
            "authors": [
                "Terry Pratchett"
            ],
            "editions": [
                1986
            ]
        }
    },
    {
        "book-store:books": {
            "lang": "English",
            "price": 13,
            "title": "Good Omens",
            "authors": [
                "Terry Pratchett",
                "Neil Gaiman"
            ],
            "editions": [
                2006
            ]
        }
    },
    {
        "book-store:books": {
            "lang": "",
            "price": 20,
            "title": "A Book with No Language",
            "authors": [
                "Joe Bloggs"
            ],
            "editions": [
                2023
            ]
        }
    },
    {
        "book-store:books": {
            "lang": "German",
            "price": 39,
            "title": "Debian GNU/Linux",
            "authors": [
                "Peter H. Ganten",
                "Wulf Alex"
            ],
            "editions": [
                2013,
                2021,
                2007
            ]
        }
    }
]    


5

Using "<="  with combination of AND/OR condition

cps-path : //books[@price<=15 and @title="Annihilation" or @lang="Spanish"]


Code Block
titleJson Response
collapsetrue
[
    {
        "book-store:books": {
            "lang": "English",
            "price": 15,
            "title": "Annihilation",
            "authors": [
                "Jeff VanderMeer"
            ],
            "editions": [
                2014
            ]
        }
    }
]          



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.