@@ -805,7 +805,6 @@ String NonReservedWord() :
805805 | tk=<K_ALGORITHM: "ALGORITHM">
806806 | tk=<K_ALIGN:"ALIGN">
807807 | tk=<K_ALTER:"ALTER">
808- | tk=<K_ALLOW:"ALLOW">
809808 | tk=<K_ALWAYS:"ALWAYS">
810809 | tk=<K_ANALYZE:"ANALYZE">
811810 | tk=<K_APPEND_ONLY:"APPEND_ONLY">
@@ -878,7 +877,6 @@ String NonReservedWord() :
878877 | tk=<K_DESC:"DESC">
879878 | tk=<K_DESCRIBE:"DESCRIBE">
880879 | tk=<K_DISABLE : "DISABLE">
881- | tk=<K_DISALLOW:"DISALLOW">
882880 | tk=<K_DISCARD : "DISCARD">
883881 | tk=<K_DISCONNECT:"DISCONNECT">
884882 | tk=<K_DIV:"DIV">
@@ -961,7 +959,6 @@ String NonReservedWord() :
961959 | tk=<K_KILL:"KILL">
962960 | tk=<K_FN:"FN">
963961 | tk=<K_LAST: "LAST">
964- | tk=<K_LAX: "LAX">
965962 | tk=<K_LEADING:"LEADING">
966963 | tk=<K_LESS:"LESS">
967964 | tk=<K_LEVEL:"LEVEL">
@@ -1350,7 +1347,7 @@ TOKEN : /* Data Types */
13501347 | <#TYPE_UHUGEINT: "UHUGEINT" >
13511348 | <#TYPE_REAL: "REAL" | "FLOAT4" | "FLOAT">
13521349 | <#TYPE_DOUBLE: "DOUBLE" | "PRECISION" | "FLOAT8" | "FLOAT64">
1353- | <#TYPE_VARCHAR: "NVARCHAR" | "VARCHAR" | "NCHAR" | <K_CHAR> | "BPCHAR" | "TEXT" | "STRING" | <K_CHARACTER> | "VARYING" | "VARCHAR2" >
1350+ | <#TYPE_VARCHAR: "NVARCHAR" | "VARCHAR" | "NCHAR" | <K_CHAR> | "BPCHAR" | "TEXT" | "STRING" | <K_CHARACTER> | "VARYING">
13541351 | <#TYPE_TIME: "TIMETZ" >
13551352 | <#TYPE_TIMESTAMP: "TIMESTAMP_NS" | "TIMESTAMP_MS" | "TIMESTAMP_S" >
13561353
@@ -5861,8 +5858,6 @@ FromItem FromItem() #FromItem:
58615858 || (getToken(1).kind == K_LATERAL && getToken(2).kind != OPENING_BRACKET) })
58625859 fromItem=TableFunction()
58635860 |
5864- // fromItem=JsonTable()
5865- // |
58665861 LOOKAHEAD(3) fromItem=Table()
58675862 |
58685863 LOOKAHEAD(ParenthesedFromItem()) fromItem = ParenthesedFromItem()
@@ -9684,16 +9679,28 @@ JsonTableFunction.JsonTableColumnDefinition JsonTableColumnDefinition() : {
96849679 (
96859680 <K_FOR> <K_ORDINALITY> { valueColumnDefinition.setForOrdinality(true); }
96869681 |
9687- [ dataType = ColDataType() { valueColumnDefinition.setDataType(dataType); } ]
9682+ [
9683+ // Very ugly: ColDataType can consume an IDENTIFIER, which is fine, but we don't want it to
9684+ // consume an ALLOW or DISALLOW because that's a keyword for Oracle in this place.
9685+ // So we make a LOOKAHEAD on ColDataType, BUT we exclude the two cases for the IDENTIFIER
9686+ LOOKAHEAD(
9687+ ColDataType(),
9688+ { !(getToken(1).kind == S_IDENTIFIER && (
9689+ getToken(1).image.equalsIgnoreCase("ALLOW")
9690+ || getToken(1).image.equalsIgnoreCase("DISALLOW"))) } )
9691+ dataType = ColDataType() { valueColumnDefinition.setDataType(dataType); }
9692+ ]
96889693 [
96899694 <K_FORMAT> <K_JSON> { valueColumnDefinition.setFormatJson(true); }
96909695 [ <K_ENCODING> encoding = JsonEncoding() { valueColumnDefinition.setEncoding(encoding); } ]
96919696 ]
96929697 [
96939698 (
9694- <K_ALLOW> { valueColumnDefinition.setScalarsType(JsonFunction.ScalarsType.ALLOW); }
9699+ LOOKAHEAD({ getToken(1).kind == S_IDENTIFIER && getToken(1).image.equalsIgnoreCase("ALLOW") })
9700+ JsonKeyword("ALLOW") { valueColumnDefinition.setScalarsType(JsonFunction.ScalarsType.ALLOW); }
96959701 |
9696- <K_DISALLOW> { valueColumnDefinition.setScalarsType(JsonFunction.ScalarsType.DISALLOW); }
9702+ LOOKAHEAD({ getToken(1).kind == S_IDENTIFIER && getToken(1).image.equalsIgnoreCase("DISALLOW") })
9703+ JsonKeyword("DISALLOW") { valueColumnDefinition.setScalarsType(JsonFunction.ScalarsType.DISALLOW); }
96979704 )
96989705 JsonKeyword("SCALARS")
96999706 ]
@@ -9903,7 +9910,8 @@ JsonTableFunction.JsonTableParsingTypeClause JsonTableParsingTypeClause() : {
99039910 (
99049911 <K_STRICT> { parsingType.setType(JsonTableFunction.JsonTableParsingType.STRICT); }
99059912 |
9906- <K_LAX> { parsingType.setType(JsonTableFunction.JsonTableParsingType.LAX); }
9913+ LOOKAHEAD({ getToken(1).kind == S_IDENTIFIER && getToken(1).image.equalsIgnoreCase("LAX") })
9914+ JsonKeyword("LAX") { parsingType.setType(JsonTableFunction.JsonTableParsingType.LAX); }
99079915 )
99089916 <CLOSING_BRACKET>
99099917 {
0 commit comments