Description
Hello,
With the JSQL Parser Version 4.5, I encountered the two following issues when parsing PostgreSQL JSON functions in infix notation (the "arrow" operators).
The query
SELECT '{"key": "value"}'::json -> 'key' AS X
yields an exception
net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "->" "->"
.
This extends to all the combinations that I tried for the pattern
SELECT [leftOperand]::[datatype] [arrowSymbol] [rightOperand] AS X
where
[leftOperand] is a json object
[datatype] is one of {json, jsonb}
[arrowSymbol] is one of { ->, ->>, #>, #>>}
[rightOperand] is a positive integer, a quoted string or a an expression of the form '{a,b}'.
The query
SELECT Y::json -> 'key' AS X
is parsed.
As well as all the combinations that I tried for the above pattern, but where is a non-quoted string (aka a variable name).
The expression
Y::json -> 'key'
in this example is exposed as an instance of
net.sf.jsqlparser.expression.JSONExpression
.
And the right operand ('key' in this example) is the first element of the list
net.sf.jsqlparser.expression.JSONExpression.idents
.
However, this list idents
has private access.
And looking at the source code, I could not find a way to retrieve its elements.
The class JSONExpression
contains a getter method for idents
, but the code has been commented out.
Thank you in advance for your help.
Kind regards,
Julien Corman