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

@ -147,6 +147,11 @@ public class JavaccToken implements GenericToken<JavaccToken> {
return image.toString();
}
/** Returns the original text of the token. The image may be normalized. */
public Chars getText() {
return document.getTextDocument().sliceOriginalText(getRegion());
}
@Override
public final TextRegion getRegion() {
return TextRegion.fromBothOffsets(startOffset, endOffset);

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(): {}

View File

@ -9,6 +9,7 @@ import java.util.Locale;
import org.checkerframework.checker.nullness.qual.Nullable;
import net.sourceforge.pmd.benchmark.TimeTracker;
import net.sourceforge.pmd.lang.TokenManager;
import net.sourceforge.pmd.lang.ast.ParseException;
import net.sourceforge.pmd.lang.ast.impl.javacc.CharStream;
import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccToken;
@ -16,6 +17,7 @@ import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccTokenDocument;
import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccTokenDocument.TokenDocumentBehavior;
import net.sourceforge.pmd.lang.ast.impl.javacc.JjtreeParserAdapter;
import net.sourceforge.pmd.lang.document.Chars;
import net.sourceforge.pmd.lang.document.TextDocument;
import net.sourceforge.pmd.lang.plsql.symboltable.SymbolFacade;
public class PLSQLParser extends JjtreeParserAdapter<ASTInput> {
@ -88,4 +90,8 @@ public class PLSQLParser extends JjtreeParserAdapter<ASTInput> {
return root;
}
public static TokenManager<JavaccToken> newTokenManager(TextDocument doc) {
return PLSQLTokenKinds.newTokenManager(CharStream.create(doc, TOKEN_BEHAVIOR));
}
}

View File

@ -8,9 +8,9 @@ import net.sourceforge.pmd.cpd.CpdLanguageProperties;
import net.sourceforge.pmd.cpd.impl.JavaccCpdLexer;
import net.sourceforge.pmd.lang.LanguagePropertyBundle;
import net.sourceforge.pmd.lang.TokenManager;
import net.sourceforge.pmd.lang.ast.impl.javacc.CharStream;
import net.sourceforge.pmd.lang.ast.impl.javacc.JavaccToken;
import net.sourceforge.pmd.lang.document.TextDocument;
import net.sourceforge.pmd.lang.plsql.ast.PLSQLParser;
import net.sourceforge.pmd.lang.plsql.ast.PLSQLTokenKinds;
/**
@ -54,6 +54,6 @@ public class PLSQLCpdLexer extends JavaccCpdLexer {
@Override
protected TokenManager<JavaccToken> makeLexerImpl(TextDocument doc) {
return PLSQLTokenKinds.newTokenManager(CharStream.create(doc));
return PLSQLParser.newTokenManager(doc);
}
}

View File

@ -16,7 +16,7 @@ class CursorAttributesTest extends AbstractPLSQLParserTst {
void parseCursorWithAttribute() {
ASTInput input = plsql.parseResource("CursorAttributes.pls");
ASTExpression exp = input.descendants(ASTIfStatement.class).first().firstChild(ASTExpression.class);
assertEquals("TestSearch%notfound", exp.getImage());
assertEquals("TestSearch%NOTFOUND", exp.getImage());
}
@Test

View File

@ -16,7 +16,6 @@
| | | +- SimpleExpression[@CanonicalImage = "A.OWNER", @Image = "a.owner"]
| | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | +- Column[@CanonicalImage = "OWNER", @Image = "owner"]
| | | +- ID[@CanonicalImage = "OWNER", @Image = "owner"]
| | +- SqlExpression[@CanonicalImage = "U.OBJECT_NAME", @Image = "u.object_name"]
@ -33,7 +32,6 @@
| | | +- ID[@CanonicalImage = "P", @Image = "p"]
| | +- Column[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
| | +- ID[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
| | +- KEYWORD_UNRESERVED[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
| +- FromClause[@CanonicalImage = null]
| | +- JoinClause[@CanonicalImage = null]
| | +- TableReference[@CanonicalImage = null]
@ -43,14 +41,12 @@
| | | | +- ID[@CanonicalImage = "U", @Image = "u"]
| | | +- TableAlias[@CanonicalImage = "INNER", @Image = "INNER"]
| | | +- ID[@CanonicalImage = "INNER", @Image = "INNER"]
| | | +- KEYWORD_UNRESERVED[@CanonicalImage = "INNER", @Image = "INNER"]
| | +- InnerCrossJoinClause[@CanonicalImage = null, @Cross = false, @Natural = false]
| | | +- TableReference[@CanonicalImage = null]
| | | | +- TableName[@CanonicalImage = "ALL_OBJECTS", @Image = "ALL_OBJECTS"]
| | | | | +- ID[@CanonicalImage = "ALL_OBJECTS", @Image = "ALL_OBJECTS"]
| | | | +- TableAlias[@CanonicalImage = "A", @Image = "a"]
| | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | +- ConditionalAndExpression[@CanonicalImage = "U.OBJECT_NAME = A.OBJECT_NAME AND U.OBJECT_TYPE = A.OBJECT_TYPE AND U.OBJECT_ID = A.OBJECT_ID", @Image = "u.object_name = a.object_name AND u.object_type = a.object_type AND u.object_id = a.object_id"]
| | | +- EqualityExpression[@CanonicalImage = "U.OBJECT_NAME = A.OBJECT_NAME", @Image = "u.object_name = a.object_name"]
| | | | +- PrimaryPrefix[@CanonicalImage = "U.OBJECT_NAME", @Image = "u.object_name", @SelfModifier = false]
@ -63,7 +59,6 @@
| | | | +- SimpleExpression[@CanonicalImage = "A.OBJECT_NAME", @Image = "a.object_name"]
| | | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | | +- Column[@CanonicalImage = "OBJECT_NAME", @Image = "object_name"]
| | | | +- ID[@CanonicalImage = "OBJECT_NAME", @Image = "object_name"]
| | | +- EqualityExpression[@CanonicalImage = "U.OBJECT_TYPE = A.OBJECT_TYPE", @Image = "u.object_type = a.object_type"]
@ -77,7 +72,6 @@
| | | | +- SimpleExpression[@CanonicalImage = "A.OBJECT_TYPE", @Image = "a.object_type"]
| | | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | | +- Column[@CanonicalImage = "OBJECT_TYPE", @Image = "object_type"]
| | | | +- ID[@CanonicalImage = "OBJECT_TYPE", @Image = "object_type"]
| | | +- EqualityExpression[@CanonicalImage = "U.OBJECT_ID = A.OBJECT_ID", @Image = "u.object_id = a.object_id"]
@ -91,7 +85,6 @@
| | | +- SimpleExpression[@CanonicalImage = "A.OBJECT_ID", @Image = "a.object_id"]
| | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | +- Column[@CanonicalImage = "OBJECT_ID", @Image = "object_id"]
| | | +- ID[@CanonicalImage = "OBJECT_ID", @Image = "object_id"]
| | +- InnerCrossJoinClause[@CanonicalImage = null, @Cross = false, @Natural = false]
@ -112,7 +105,6 @@
| | | +- SimpleExpression[@CanonicalImage = "A.OWNER", @Image = "a.owner"]
| | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | +- Column[@CanonicalImage = "OWNER", @Image = "owner"]
| | | +- ID[@CanonicalImage = "OWNER", @Image = "owner"]
| | +- EqualityExpression[@CanonicalImage = "P.OBJECT_NAME = A.OBJECT_NAME", @Image = "p.object_name = a.object_name"]
@ -126,7 +118,6 @@
| | | +- SimpleExpression[@CanonicalImage = "A.OBJECT_NAME", @Image = "a.object_name"]
| | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | +- Column[@CanonicalImage = "OBJECT_NAME", @Image = "object_name"]
| | | +- ID[@CanonicalImage = "OBJECT_NAME", @Image = "object_name"]
| | +- EqualityExpression[@CanonicalImage = "P.OBJECT_TYPE = A.OBJECT_TYPE", @Image = "p.object_type = a.object_type"]
@ -140,7 +131,6 @@
| | +- SimpleExpression[@CanonicalImage = "A.OBJECT_TYPE", @Image = "a.object_type"]
| | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | +- Column[@CanonicalImage = "OBJECT_TYPE", @Image = "object_type"]
| | +- ID[@CanonicalImage = "OBJECT_TYPE", @Image = "object_type"]
| +- WhereClause[@CanonicalImage = null]
@ -152,7 +142,6 @@
| | +- SimpleExpression[@CanonicalImage = "A.OWNER", @Image = "a.owner"]
| | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | +- Column[@CanonicalImage = "OWNER", @Image = "owner"]
| | +- ID[@CanonicalImage = "OWNER", @Image = "owner"]
| +- SqlExpression[@CanonicalImage = "USER", @Image = "USER"]
@ -160,7 +149,6 @@
| +- SimpleExpression[@CanonicalImage = "USER", @Image = "USER"]
| +- Column[@CanonicalImage = "USER", @Image = "USER"]
| +- ID[@CanonicalImage = "USER", @Image = "USER"]
| +- KEYWORD_UNRESERVED[@CanonicalImage = "USER", @Image = "USER"]
+- Statement[@CanonicalImage = null]
| +- UnlabelledStatement[@CanonicalImage = null]
| +- ForStatement[@CanonicalImage = null]
@ -225,5 +213,4 @@
| | +- ID[@CanonicalImage = "L_OBJECT", @Image = "l_object"]
| +- Column[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
| +- ID[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
| +- KEYWORD_UNRESERVED[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
+- ID[@CanonicalImage = "EXAMPLE_PROCEDURE", @Image = "EXAMPLE_PROCEDURE"]

View File

@ -16,7 +16,6 @@
| | | +- SimpleExpression[@CanonicalImage = "A.OWNER", @Image = "a.owner"]
| | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | +- Column[@CanonicalImage = "OWNER", @Image = "owner"]
| | | +- ID[@CanonicalImage = "OWNER", @Image = "owner"]
| | +- SqlExpression[@CanonicalImage = "U.OBJECT_NAME", @Image = "u.object_name"]
@ -33,7 +32,6 @@
| | | +- ID[@CanonicalImage = "P", @Image = "p"]
| | +- Column[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
| | +- ID[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
| | +- KEYWORD_UNRESERVED[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
| +- FromClause[@CanonicalImage = null]
| | +- TableReference[@CanonicalImage = null]
| | +- JoinClause[@CanonicalImage = null]
@ -50,7 +48,6 @@
| | | | | +- ID[@CanonicalImage = "ALL_OBJECTS", @Image = "ALL_OBJECTS"]
| | | | +- TableAlias[@CanonicalImage = "A", @Image = "a"]
| | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | +- ConditionalAndExpression[@CanonicalImage = "U.OBJECT_NAME = A.OBJECT_NAME AND U.OBJECT_TYPE = A.OBJECT_TYPE AND U.OBJECT_ID = A.OBJECT_ID", @Image = "u.object_name = a.object_name AND u.object_type = a.object_type AND u.object_id = a.object_id"]
| | | +- EqualityExpression[@CanonicalImage = "U.OBJECT_NAME = A.OBJECT_NAME", @Image = "u.object_name = a.object_name"]
| | | | +- PrimaryPrefix[@CanonicalImage = "U.OBJECT_NAME", @Image = "u.object_name", @SelfModifier = false]
@ -63,7 +60,6 @@
| | | | +- SimpleExpression[@CanonicalImage = "A.OBJECT_NAME", @Image = "a.object_name"]
| | | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | | +- Column[@CanonicalImage = "OBJECT_NAME", @Image = "object_name"]
| | | | +- ID[@CanonicalImage = "OBJECT_NAME", @Image = "object_name"]
| | | +- EqualityExpression[@CanonicalImage = "U.OBJECT_TYPE = A.OBJECT_TYPE", @Image = "u.object_type = a.object_type"]
@ -77,7 +73,6 @@
| | | | +- SimpleExpression[@CanonicalImage = "A.OBJECT_TYPE", @Image = "a.object_type"]
| | | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | | +- Column[@CanonicalImage = "OBJECT_TYPE", @Image = "object_type"]
| | | | +- ID[@CanonicalImage = "OBJECT_TYPE", @Image = "object_type"]
| | | +- EqualityExpression[@CanonicalImage = "U.OBJECT_ID = A.OBJECT_ID", @Image = "u.object_id = a.object_id"]
@ -91,7 +86,6 @@
| | | +- SimpleExpression[@CanonicalImage = "A.OBJECT_ID", @Image = "a.object_id"]
| | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | +- Column[@CanonicalImage = "OBJECT_ID", @Image = "object_id"]
| | | +- ID[@CanonicalImage = "OBJECT_ID", @Image = "object_id"]
| | +- InnerCrossJoinClause[@CanonicalImage = null, @Cross = false, @Natural = false]
@ -112,7 +106,6 @@
| | | +- SimpleExpression[@CanonicalImage = "A.OWNER", @Image = "a.owner"]
| | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | +- Column[@CanonicalImage = "OWNER", @Image = "owner"]
| | | +- ID[@CanonicalImage = "OWNER", @Image = "owner"]
| | +- EqualityExpression[@CanonicalImage = "P.OBJECT_NAME = A.OBJECT_NAME", @Image = "p.object_name = a.object_name"]
@ -126,7 +119,6 @@
| | | +- SimpleExpression[@CanonicalImage = "A.OBJECT_NAME", @Image = "a.object_name"]
| | | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | | +- Column[@CanonicalImage = "OBJECT_NAME", @Image = "object_name"]
| | | +- ID[@CanonicalImage = "OBJECT_NAME", @Image = "object_name"]
| | +- EqualityExpression[@CanonicalImage = "P.OBJECT_TYPE = A.OBJECT_TYPE", @Image = "p.object_type = a.object_type"]
@ -140,7 +132,6 @@
| | +- SimpleExpression[@CanonicalImage = "A.OBJECT_TYPE", @Image = "a.object_type"]
| | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | +- Column[@CanonicalImage = "OBJECT_TYPE", @Image = "object_type"]
| | +- ID[@CanonicalImage = "OBJECT_TYPE", @Image = "object_type"]
| +- WhereClause[@CanonicalImage = null]
@ -152,7 +143,6 @@
| | +- SimpleExpression[@CanonicalImage = "A.OWNER", @Image = "a.owner"]
| | +- TableName[@CanonicalImage = "A", @Image = "a"]
| | | +- ID[@CanonicalImage = "A", @Image = "a"]
| | | +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
| | +- Column[@CanonicalImage = "OWNER", @Image = "owner"]
| | +- ID[@CanonicalImage = "OWNER", @Image = "owner"]
| +- SqlExpression[@CanonicalImage = "USER", @Image = "USER"]
@ -160,7 +150,6 @@
| +- SimpleExpression[@CanonicalImage = "USER", @Image = "USER"]
| +- Column[@CanonicalImage = "USER", @Image = "USER"]
| +- ID[@CanonicalImage = "USER", @Image = "USER"]
| +- KEYWORD_UNRESERVED[@CanonicalImage = "USER", @Image = "USER"]
+- Statement[@CanonicalImage = null]
| +- UnlabelledStatement[@CanonicalImage = null]
| +- ForStatement[@CanonicalImage = null]
@ -225,5 +214,4 @@
| | +- ID[@CanonicalImage = "L_OBJECT", @Image = "l_object"]
| +- Column[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
| +- ID[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
| +- KEYWORD_UNRESERVED[@CanonicalImage = "AGGREGATE", @Image = "aggregate"]
+- ID[@CanonicalImage = "EXAMPLE_PROCEDURE", @Image = "EXAMPLE_PROCEDURE"]

View File

@ -25,7 +25,6 @@
| | | | +- ID[@CanonicalImage = "SN", @Image = "sn"]
| | | +- Column[@CanonicalImage = "NAME", @Image = "name"]
| | | +- ID[@CanonicalImage = "NAME", @Image = "name"]
| | | +- KEYWORD_UNRESERVED[@CanonicalImage = "NAME", @Image = "name"]
| | +- SqlExpression[@CanonicalImage = "SA.AGE", @Image = "sa.age"]
| | | +- PrimaryPrefix[@CanonicalImage = "SA.AGE", @Image = "sa.age", @SelfModifier = false]
| | | +- SimpleExpression[@CanonicalImage = "SA.AGE", @Image = "sa.age"]
@ -47,7 +46,6 @@
| | | +- ID[@CanonicalImage = "SP", @Image = "sp"]
| | +- Column[@CanonicalImage = "PARENT", @Image = "parent"]
| | +- ID[@CanonicalImage = "PARENT", @Image = "parent"]
| | +- KEYWORD_UNRESERVED[@CanonicalImage = "PARENT", @Image = "parent"]
| +- FromClause[@CanonicalImage = null]
| | +- TableReference[@CanonicalImage = null]
| | +- JoinClause[@CanonicalImage = null]

View File

@ -37,7 +37,6 @@
| | +- ID[@CanonicalImage = "DUAL", @Image = "dual"]
| +- TableAlias[@CanonicalImage = "A", @Image = "a"]
| +- ID[@CanonicalImage = "A", @Image = "a"]
| +- KEYWORD_UNRESERVED[@CanonicalImage = "A", @Image = "a"]
+- WhereClause[@CanonicalImage = null]
+- Condition[@CanonicalImage = null]
+- CompoundCondition[@CanonicalImage = null, @Type = null]

View File

@ -1,3 +1,3 @@
+- Input[@CanonicalImage = null, @ExcludedLinesCount = 0, @ExcludedRangesCount = 0]
+- SqlPlusCommand[@CanonicalImage = "DEFINE PATCH_NAME = ACME_MODULE", @Image = "define patch_name = acme_module "]
+- SqlPlusCommand[@CanonicalImage = "SPOOL &PATCH_NAME. . LOG", @Image = "spool &patch_name. . log "]
+- SqlPlusCommand[@CanonicalImage = "DEFINE PATCH_NAME = ACME_MODULE", @Image = "DEFINE PATCH_NAME = ACME_MODULE "]
+- SqlPlusCommand[@CanonicalImage = "SPOOL &PATCH_NAME. . LOG", @Image = "SPOOL &PATCH_NAME. . LOG "]