Skip to content

Commit 3f5edea

Browse files
committed
[bugfix] Fixed token limit again...
1 parent ee3e4f4 commit 3f5edea

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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
{

src/test/java/net/sf/jsqlparser/expression/JsonTableOracleTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@ void testExistsColumns(String jsonTableStr) throws JSQLParserException {
9292
"JSON_TABLE(document COLUMNS( val BLOB PATH '$.pathTest'))",
9393
"JSON_TABLE(document COLUMNS( val JSON PATH '$.pathTest'))",
9494
"JSON_TABLE(document COLUMNS( val VECTOR PATH '$.pathTest'))",
95-
"JSON_TABLE(document COLUMNS( val VARCHAR2 PATH '$.pathTest'))",
96-
"JSON_TABLE(document COLUMNS( val VARCHAR2(240) PATH '$.pathTest'))",
97-
"JSON_TABLE(document COLUMNS( val VARCHAR2(240) FORMAT JSON PATH '$.pathTest'))",
95+
"JSON_TABLE(document COLUMNS( val VARCHAR PATH '$.pathTest'))",
96+
"JSON_TABLE(document COLUMNS( val VARCHAR(240) PATH '$.pathTest'))",
97+
"JSON_TABLE(document COLUMNS( val VARCHAR(240) FORMAT JSON PATH '$.pathTest'))",
9898

9999
// These would require adapting ColDataType in Line 10176
100100
// "JSON_TABLE(document COLUMNS( val VARCHAR2(500 BYTE) PATH '$.pathTest'))",

0 commit comments

Comments
 (0)