@@ -4057,7 +4057,6 @@ JsonExpression JsonExpression() : {
4057
4057
CastExpression castExpr = null;
4058
4058
}
4059
4059
{
4060
- // LOOKAHEAD(3, {getAsBoolean(Feature.allowComplexParsing) && !interrupted})
4061
4060
(
4062
4061
LOOKAHEAD(3, {!interrupted}) expr=CaseWhenExpression()
4063
4062
|
@@ -4082,19 +4081,65 @@ JsonExpression JsonExpression() : {
4082
4081
LOOKAHEAD( {!interrupted} ) "(" expr=ParenthesedSelect() ")"
4083
4082
)
4084
4083
4085
- ( "::" type=ColDataType() {
4084
+ (
4085
+ "::" type=ColDataType()
4086
+ {
4086
4087
castExpr = new CastExpression();
4087
4088
castExpr.setUseCastKeyword(false);
4088
4089
castExpr.setLeftExpression(expr);
4089
4090
castExpr.setColDataType(type);
4090
4091
expr=castExpr;
4091
- } )*
4092
+ }
4093
+ )*
4094
+ {
4095
+ result.setExpression(expr);
4096
+ }
4097
+
4092
4098
(
4093
- "->" (token=<S_CHAR_LITERAL> | token=<S_LONG>) {result.addIdent(token.image,"->");} |
4094
- "->>" (token=<S_CHAR_LITERAL> | token=<S_LONG>) {result.addIdent(token.image,"->>");} |
4095
- "#>" token=<S_CHAR_LITERAL> {result.addIdent(token.image,"#>");} |
4096
- "#>>" token=<S_CHAR_LITERAL> {result.addIdent(token.image,"#>>");}
4099
+ LOOKAHEAD(2) (
4100
+ "->" (token=<S_CHAR_LITERAL> | token=<S_LONG>) {result.addIdent(token.image,"->");}
4101
+ |
4102
+ "->>" (token=<S_CHAR_LITERAL> | token=<S_LONG>) {result.addIdent(token.image,"->>");}
4103
+ |
4104
+ "#>" token=<S_CHAR_LITERAL> {result.addIdent(token.image,"#>");}
4105
+ |
4106
+ "#>>" token=<S_CHAR_LITERAL> {result.addIdent(token.image,"#>>");}
4107
+ )
4097
4108
)+
4109
+
4110
+ // chaining JSON Expressions, e.g.
4111
+ // '{"obj":{"field": "value"}}'::JSON -> 'obj'::TEXT ->> 'field'::TEXT
4112
+ (
4113
+ LOOKAHEAD(2, {!interrupted} ) (
4114
+ LOOKAHEAD(2) (
4115
+ "::" type=ColDataType()
4116
+ {
4117
+ castExpr = new CastExpression();
4118
+ castExpr.setUseCastKeyword(false);
4119
+ castExpr.setLeftExpression(result);
4120
+ castExpr.setColDataType(type);
4121
+ expr=castExpr;
4122
+ }
4123
+ )
4124
+ )+
4125
+ {
4126
+ result = new JsonExpression();
4127
+ result.setExpression(expr);
4128
+ }
4129
+
4130
+ (
4131
+ LOOKAHEAD(2) (
4132
+ "->" (token=<S_CHAR_LITERAL> | token=<S_LONG>) {result.addIdent(token.image,"->");}
4133
+ |
4134
+ "->>" (token=<S_CHAR_LITERAL> | token=<S_LONG>) {result.addIdent(token.image,"->>");}
4135
+ |
4136
+ "#>" token=<S_CHAR_LITERAL> {result.addIdent(token.image,"#>");}
4137
+ |
4138
+ "#>>" token=<S_CHAR_LITERAL> {result.addIdent(token.image,"#>>");}
4139
+ )
4140
+ )*
4141
+ )*
4142
+
4098
4143
{
4099
4144
result.setExpression(expr);
4100
4145
return result;
@@ -5254,7 +5299,7 @@ ColDataType ColDataType():
5254
5299
5255
5300
[LOOKAHEAD(2) "(" {tk2 =null;} ( ( ( tk=<S_LONG> [ LOOKAHEAD(2) (tk2=<K_BYTE> | tk2=<K_CHAR>) ] ) | tk=<S_CHAR_LITERAL> | tk=<S_IDENTIFIER> | tk=<K_CHAR> )
5256
5301
{ argumentsStringList.add(tk.image + (tk2!=null?" " + tk2.image:"")); } ["," {/*argumentsStringList.add(",");*/}] )* ")"]
5257
- [( "[" {tk=null;} [ tk=<S_LONG> ] { array.add(tk!=null?Integer.valueOf(tk.image):null); } "]" )+ { colDataType.setArrayData(array); } ]
5302
+ [ LOOKAHEAD(2) ( LOOKAHEAD(2) "[" {tk=null;} [ tk=<S_LONG> ] { array.add(tk!=null?Integer.valueOf(tk.image):null); } "]" )+ { colDataType.setArrayData(array); } ]
5258
5303
[LOOKAHEAD(2) <K_CHARACTER> <K_SET> (tk=<S_IDENTIFIER> | tk=<K_BINARY>) { colDataType.setCharacterSet(tk.image); } ]
5259
5304
5260
5305
{
0 commit comments