Make @Image have old behavior, remove KEYWORD_UNRESERVED from tree

This commit is contained in:
Clément Fournier
2024-04-21 21:57:27 +02:00
parent 838df27a19
commit 75e50df94a
10 changed files with 45 additions and 58 deletions

View File

@@ -216,7 +216,10 @@ public class PLSQLParserImpl {
* Usage: <code>LOOKAHEAD({isKeyword("WAIT")}) KEYWORD("WAIT")</code>
*/
private boolean isKeyword(String keyword) {
return getToken(1).kind == IDENTIFIER && getToken(1).getImage().equalsIgnoreCase(keyword);
return getToken(1).kind == IDENTIFIER
&& getToken(1).getImage().equalsIgnoreCase(keyword)
// quoted identifiers are excluded
&& getToken(1).getText().charAt(0) != '"';
}
}
@@ -1686,18 +1689,18 @@ ASTSimpleExpression SimpleExpression() :
LOOKAHEAD(4) ID() "." ( <CURRVAL> | <NEXTVAL> )
|
LOOKAHEAD(6)
SchemaName() { sb.append(token.getImage()); } "." { sb.append(token.getImage()); }
TableName() { sb.append(token.getImage()); } "." { sb.append(token.getImage()); }
( "*" | Column() ) { sb.append(token.getImage()); }
SchemaName() { sb.append(token.getText()); } "." { sb.append(token.getImage()); }
TableName() { sb.append(token.getText()); } "." { sb.append(token.getImage()); }
( "*" | Column() ) { sb.append(token.getText()); }
|
LOOKAHEAD(4)
TableName() { sb.append(token.getImage()); } "." { sb.append(token.getImage()); }
( "*" | Column() ) { sb.append(token.getImage()); }
TableName() { sb.append(token.getText()); } "." { sb.append(token.getImage()); }
( "*" | Column() ) { sb.append(token.getText()); }
|
// Named Cursor: https://docs.oracle.com/en/database/oracle/oracle-database/18/lnpls/named-cursor-attribute.html#GUID-CD8D8415-FF19-4D81-99BA-7825FD40CC96
// Implicit Cursor: https://docs.oracle.com/en/database/oracle/oracle-database/18/lnpls/implicit-cursor-attribute.html#GUID-5A938EE7-E8D2-468C-B60F-81898F110BE1
LOOKAHEAD(3)
Column() { sb.append(token.getImage()); } "%" ( LOOKAHEAD({isKeyword("isopen")}) KEYWORD("ISOPEN")
Column() { sb.append(token.getText()); } "%" ( LOOKAHEAD({isKeyword("isopen")}) KEYWORD("ISOPEN")
| LOOKAHEAD({isKeyword("found")}) KEYWORD("FOUND")
| LOOKAHEAD({isKeyword("notfound")}) KEYWORD("NOTFOUND")
| LOOKAHEAD({isKeyword("rowcount")}) KEYWORD("ROWCOUNT")
@@ -1706,7 +1709,7 @@ ASTSimpleExpression SimpleExpression() :
) { sb.append('%').append(token.getImage()); }
|
LOOKAHEAD(2)
( "*" | Column() ) { sb.append(token.getImage()); }
( "*" | Column() ) { sb.append(token.getText()); }
)
{
jjtThis.setImage(sb.toString());
@@ -1715,11 +1718,11 @@ ASTSimpleExpression SimpleExpression() :
}
ASTOuterJoinExpression OuterJoinExpression() :
{ StringBuilder sb = new StringBuilder(); }
{ StringBuilder sb = new StringBuilder(); PLSQLNode node; }
{
[ LOOKAHEAD(6) SchemaName() { sb.append(token.getImage()); } "." { sb.append(token.getImage()); } ]
[ LOOKAHEAD(4) TableName() { sb.append(token.getImage()); } "." { sb.append(token.getImage()); } ]
Column() { sb.append(token.getImage()); }
[ LOOKAHEAD(6) node=SchemaName() { sb.append(node.getImage()); } "." { sb.append(token.getImage()); } ]
[ LOOKAHEAD(4) node=TableName() { sb.append(node.getImage()); } "." { sb.append(token.getImage()); } ]
node=Column() { sb.append(node.getImage()); }
"(" "+" ")"
{
@@ -5229,6 +5232,7 @@ TOKEN :
|
( <LEXICAL_PARAMETER> ( <LETTER> | <DIGIT> | "$" | "_" | "#" )* )
|
// todo separate quoted identifier into other token
( "\"" <ID_SIMPLE> "\"" )
>
|
@@ -5425,10 +5429,13 @@ void KEYWORD(String id) #void:
}
}
ASTKEYWORD_UNRESERVED KEYWORD_UNRESERVED (): {}
// This is only used to generate a node class
// @Deprecated
void KEYWORD_UNRESERVED (): {}{KEYWORD_NOT_RESERVED()}
void KEYWORD_NOT_RESERVED () #void: {}
{
// PL/SQL UNRESERVED KEYWORDS - V$RESERVED.RESERVED='N'
(
"REF" | "LAST" | "TRIM" | "OVER" | "UNBOUNDED" | "PRECEDING" | "FOLLOWING" | "WITHIN" |
"OVERFLOW" | "ERROR" | "WITHOUT" | "COUNT" | "SUBPARTITION" | "LOG" | "ERRORS" | "REJECT" | "UNLIMITED" |
<FALSE>
@@ -6489,9 +6496,6 @@ ASTKEYWORD_UNRESERVED KEYWORD_UNRESERVED (): {}
| <RENAME> //Although RENAME is an Oracle reserved word, it may be used as a PL/SQL name.
| <RELEASE> //Although RELEASE is an Oracle reserved word, it may be used as a PL/SQL name.
| <INLINE> // PRAGMA INLINE is not a PLSQL reserved word
)
{ jjtThis.setImage(token.getImage()) ; jjtThis.value = token ; return jjtThis ; }
}
//SRT 2011-04-17 - END */
@@ -6502,7 +6506,7 @@ ASTID ID(): {}
{
(<IDENTIFIER>
| <QUOTED_LITERAL>
| KEYWORD_UNRESERVED() //SRT 2011-04-17
| KEYWORD_NOT_RESERVED() //SRT 2011-04-17
/*KEYWORDS_UNRESERVED
|<EXTRACT> | <FALSE> | <TRUE> | <SECOND> | <MINUTE> | <HOUR> | <DAY> | <MONTH> | <YEAR>
| <NO> |<ROW> | <CURSOR>
@@ -6676,7 +6680,7 @@ ASTID ID(): {}
//20120427 | <MODIFY>
//SRT 20110524 | <SELF>
)
{ jjtThis.setImage(token.getImage()) ; jjtThis.value = token ; return jjtThis ; }
{ jjtThis.setImage(token.getText().toString()) ; jjtThis.value = token ; return jjtThis ; }
}
/**
@@ -6687,7 +6691,7 @@ ASTUnqualifiedID UnqualifiedID(): {}
(
<IDENTIFIER>
| <QUOTED_LITERAL>
| KEYWORD_UNRESERVED() //SRT 2011-04-17
| KEYWORD_NOT_RESERVED() //SRT 2011-04-17
| <BODY>
//20120501 | <INTERVAL>
| <MOD>
@@ -6706,9 +6710,9 @@ ASTUnqualifiedID UnqualifiedID(): {}
| <INT>
| <ARRAY>
//| <RESULT>
//| KEYWORD_UNRESERVED() //SRT 2011-04-17
//| KEYWORD_NOT_RESERVED() //SRT 2011-04-17
)
{ jjtThis.setImage(token.getImage()) ; jjtThis.value = token ; return jjtThis ; }
{ jjtThis.setImage(token.getText().toString()) ; jjtThis.value = token ; return jjtThis ; }
}
/**
@@ -6719,7 +6723,7 @@ ASTQualifiedID QualifiedID(): {}
(
<IDENTIFIER>
| <QUOTED_LITERAL>
| KEYWORD_UNRESERVED() //SRT 2011-04-17
| KEYWORD_NOT_RESERVED() //SRT 2011-04-17
/*
| <EXTRACT> --Unreserved Key Word
| <FALSE> --Unreserved Key Word
@@ -6921,9 +6925,9 @@ ASTQualifiedID QualifiedID(): {}
// | <ZONE>
//| <CHARACTER>
//| <LIMIT>
//| KEYWORD_UNRESERVED() //SRT 2011-04-17
//| KEYWORD_NOT_RESERVED() //SRT 2011-04-17
)
{ jjtThis.setImage(token.getImage()) ; jjtThis.value = token ; return jjtThis ; }
{ jjtThis.setImage(token.getText().toString()) ; jjtThis.value = token ; return jjtThis ; }
}
ASTTypeKeyword TypeKeyword(): {}