[plsql] SQL_MACRO - fixups from #5087
This commit is contained in:
@ -747,7 +747,7 @@ ASTMethodDeclarator MethodDeclarator() :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// There is no RETURN for a WRAPPED object
|
// There is no RETURN for a WRAPPED object
|
||||||
[ <RETURN> Datatype() [ SqlMacroClause() ] ]
|
[ <RETURN> Datatype() [ LOOKAHEAD({isKeyword("SQL_MACRO")}) SqlMacroClause() ] ]
|
||||||
|
|
||||||
)
|
)
|
||||||
| <PROCEDURE>
|
| <PROCEDURE>
|
||||||
@ -5171,7 +5171,6 @@ TOKEN [IGNORE_CASE]:
|
|||||||
<ROWTYPE: "ROWTYPE"> |
|
<ROWTYPE: "ROWTYPE"> |
|
||||||
<SAVE: "SAVE"> |
|
<SAVE: "SAVE"> |
|
||||||
<SAVEPOINT: "SAVEPOINT"> |
|
<SAVEPOINT: "SAVEPOINT"> |
|
||||||
<SCALAR: "SCALAR"> |
|
|
||||||
<SECOND: "SECOND"> |
|
<SECOND: "SECOND"> |
|
||||||
<SELF: "SELF"> |
|
<SELF: "SELF"> |
|
||||||
<SEPARATE: "SEPARATE"> |
|
<SEPARATE: "SEPARATE"> |
|
||||||
@ -5185,7 +5184,6 @@ TOKEN [IGNORE_CASE]:
|
|||||||
<SPACE: "SPACE"> |
|
<SPACE: "SPACE"> |
|
||||||
<SQLCODE: "SQLCODE"> |
|
<SQLCODE: "SQLCODE"> |
|
||||||
<SQLERRM: "SQLERRM"> |
|
<SQLERRM: "SQLERRM"> |
|
||||||
<SQL_MACRO: "SQL_MACRO"> |
|
|
||||||
<STATIC: "STATIC"> |
|
<STATIC: "STATIC"> |
|
||||||
<SUBSTITUTABLE: "SUBSTITUTABLE"> |
|
<SUBSTITUTABLE: "SUBSTITUTABLE"> |
|
||||||
<SUCCESSFUL: "SUCCESSFUL"> |
|
<SUCCESSFUL: "SUCCESSFUL"> |
|
||||||
@ -5535,7 +5533,6 @@ void KEYWORD(String id) #void:
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
if (!isKeyword(id)) {
|
if (!isKeyword(id)) {
|
||||||
String eol = System.getProperty("line.separator", "\n");
|
|
||||||
throw new ParseException("Encountered \"" + getToken(1).getImage() + "\" "
|
throw new ParseException("Encountered \"" + getToken(1).getImage() + "\" "
|
||||||
+ "Was expecting: \"" + id + "\"").withLocation(token);
|
+ "Was expecting: \"" + id + "\"").withLocation(token);
|
||||||
}
|
}
|
||||||
@ -7056,7 +7053,11 @@ ASTJavaInterfaceClass JavaInterfaceClass(): {}
|
|||||||
ASTSqlMacroClause SqlMacroClause(): {}
|
ASTSqlMacroClause SqlMacroClause(): {}
|
||||||
{
|
{
|
||||||
(
|
(
|
||||||
<SQL_MACRO> [ <LPAREN> [ <TYPE> "=>" ] ( <SCALAR> | <TABLE> ) { jjtThis.setType(token.getImage()); } <RPAREN> ]
|
LOOKAHEAD({isKeyword("SQL_MACRO")}) KEYWORD("SQL_MACRO")
|
||||||
|
[
|
||||||
|
<LPAREN> [ <TYPE> "=>" ] ( LOOKAHEAD({isKeyword("SCALAR")}) KEYWORD("SCALAR") | <TABLE> )
|
||||||
|
{ jjtThis.setType(token.getImage()); } <RPAREN>
|
||||||
|
]
|
||||||
)
|
)
|
||||||
{ return jjtThis; }
|
{ return jjtThis; }
|
||||||
}
|
}
|
||||||
|
@ -6,8 +6,11 @@ package net.sourceforge.pmd.lang.plsql.ast;
|
|||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 7.4.0
|
||||||
|
*/
|
||||||
public final class ASTSqlMacroClause extends AbstractPLSQLNode {
|
public final class ASTSqlMacroClause extends AbstractPLSQLNode {
|
||||||
private String type = "TABLE";
|
private String type = "TABLE"; // TABLE is the default type if it is not explicitly given in the source
|
||||||
|
|
||||||
ASTSqlMacroClause(int id) {
|
ASTSqlMacroClause(int id) {
|
||||||
super(id);
|
super(id);
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
/**
|
|
||||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
|
||||||
*/
|
|
||||||
|
|
||||||
package net.sourceforge.pmd.lang.plsql.ast;
|
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import net.sourceforge.pmd.lang.plsql.AbstractPLSQLParserTst;
|
|
||||||
|
|
||||||
class ASTSqlMacroClauseTest extends AbstractPLSQLParserTst {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testEmpty() {
|
|
||||||
ASTInput input = plsql.parseResource("SqlMacroClause.pls");
|
|
||||||
|
|
||||||
List<ASTSqlMacroClause> sqlMacros = input.descendants(ASTSqlMacroClause.class).toList();
|
|
||||||
assertFalse(sqlMacros.isEmpty());
|
|
||||||
assertEquals("TABLE", sqlMacros.get(0).getType());
|
|
||||||
assertEquals("SCALAR", sqlMacros.get(1).getType());
|
|
||||||
assertEquals("SCALAR", sqlMacros.get(2).getType());
|
|
||||||
assertEquals("TABLE", sqlMacros.get(3).getType());
|
|
||||||
|
|
||||||
//assertEquals("=", conditions.get(0).getOperator());
|
|
||||||
}
|
|
||||||
}
|
|
@ -61,4 +61,9 @@ class PlsqlTreeDumpTest extends BaseTreeDumpTest {
|
|||||||
void exceptionHandlerTomKytesDespair() {
|
void exceptionHandlerTomKytesDespair() {
|
||||||
doTest("ExceptionHandlerTomKytesDespair");
|
doTest("ExceptionHandlerTomKytesDespair");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void sqlMacroClause() {
|
||||||
|
doTest("SqlMacroClause");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ create or replace package body test is
|
|||||||
|
|
||||||
end test3;
|
end test3;
|
||||||
|
|
||||||
function test3() return clob sql_macro(TABLE) is
|
function test4() return clob sql_macro(TABLE) is
|
||||||
begin
|
begin
|
||||||
|
|
||||||
return 'q[select * from dual]';
|
return 'q[select * from dual]';
|
||||||
|
@ -0,0 +1,109 @@
|
|||||||
|
+- Input[@CanonicalImage = null, @ExcludedLinesCount = 0, @ExcludedRangesCount = 0]
|
||||||
|
+- PackageBody[@CanonicalImage = "TEST", @Image = "test", @ObjectName = "test"]
|
||||||
|
+- ObjectNameDeclaration[@CanonicalImage = "TEST", @Image = "test"]
|
||||||
|
| +- ID[@CanonicalImage = "TEST", @Image = "test"]
|
||||||
|
+- DeclarativeSection[@CanonicalImage = null]
|
||||||
|
| +- DeclarativeUnit[@CanonicalImage = null]
|
||||||
|
| | +- ProgramUnit[@CanonicalImage = null, @MethodName = "test1", @Name = "test1", @ObjectName = null]
|
||||||
|
| | +- MethodDeclarator[@CanonicalImage = "TEST1", @Image = "test1", @ParameterCount = 1]
|
||||||
|
| | | +- ObjectNameDeclaration[@CanonicalImage = "TEST1", @Image = "test1"]
|
||||||
|
| | | | +- ID[@CanonicalImage = "TEST1", @Image = "test1"]
|
||||||
|
| | | +- FormalParameters[@CanonicalImage = "()", @Image = "()"]
|
||||||
|
| | | +- Datatype[@CanonicalImage = "CLOB", @Image = "CLOB", @TypeImage = "CLOB"]
|
||||||
|
| | | | +- ScalarDataTypeName[@CanonicalImage = "CLOB", @Image = "CLOB"]
|
||||||
|
| | | +- SqlMacroClause[@CanonicalImage = null, @Type = "TABLE"]
|
||||||
|
| | +- Statement[@CanonicalImage = null]
|
||||||
|
| | | +- UnlabelledStatement[@CanonicalImage = null]
|
||||||
|
| | | +- ReturnStatement[@CanonicalImage = null]
|
||||||
|
| | | +- Expression[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'"]
|
||||||
|
| | | +- PrimaryPrefix[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'", @SelfModifier = false]
|
||||||
|
| | | +- Literal[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'"]
|
||||||
|
| | | +- StringLiteral[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'", @String = "q[select * from dual]"]
|
||||||
|
| | +- ID[@CanonicalImage = "TEST1", @Image = "test1"]
|
||||||
|
| +- DeclarativeUnit[@CanonicalImage = null]
|
||||||
|
| | +- ProgramUnit[@CanonicalImage = null, @MethodName = "test2", @Name = "test2", @ObjectName = null]
|
||||||
|
| | +- MethodDeclarator[@CanonicalImage = "TEST2", @Image = "test2", @ParameterCount = 1]
|
||||||
|
| | | +- ObjectNameDeclaration[@CanonicalImage = "TEST2", @Image = "test2"]
|
||||||
|
| | | | +- ID[@CanonicalImage = "TEST2", @Image = "test2"]
|
||||||
|
| | | +- FormalParameters[@CanonicalImage = "()", @Image = "()"]
|
||||||
|
| | | +- Datatype[@CanonicalImage = "CLOB", @Image = "CLOB", @TypeImage = "CLOB"]
|
||||||
|
| | | | +- ScalarDataTypeName[@CanonicalImage = "CLOB", @Image = "CLOB"]
|
||||||
|
| | | +- SqlMacroClause[@CanonicalImage = null, @Type = "SCALAR"]
|
||||||
|
| | +- Statement[@CanonicalImage = null]
|
||||||
|
| | | +- UnlabelledStatement[@CanonicalImage = null]
|
||||||
|
| | | +- ReturnStatement[@CanonicalImage = null]
|
||||||
|
| | | +- Expression[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'"]
|
||||||
|
| | | +- PrimaryPrefix[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'", @SelfModifier = false]
|
||||||
|
| | | +- Literal[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'"]
|
||||||
|
| | | +- StringLiteral[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'", @String = "q[select * from dual]"]
|
||||||
|
| | +- ID[@CanonicalImage = "TEST2", @Image = "test2"]
|
||||||
|
| +- DeclarativeUnit[@CanonicalImage = null]
|
||||||
|
| | +- ProgramUnit[@CanonicalImage = null, @MethodName = "test3", @Name = "test3", @ObjectName = null]
|
||||||
|
| | +- MethodDeclarator[@CanonicalImage = "TEST3", @Image = "test3", @ParameterCount = 1]
|
||||||
|
| | | +- ObjectNameDeclaration[@CanonicalImage = "TEST3", @Image = "test3"]
|
||||||
|
| | | | +- ID[@CanonicalImage = "TEST3", @Image = "test3"]
|
||||||
|
| | | +- FormalParameters[@CanonicalImage = "()", @Image = "()"]
|
||||||
|
| | | +- Datatype[@CanonicalImage = "CLOB", @Image = "CLOB", @TypeImage = "CLOB"]
|
||||||
|
| | | | +- ScalarDataTypeName[@CanonicalImage = "CLOB", @Image = "CLOB"]
|
||||||
|
| | | +- SqlMacroClause[@CanonicalImage = null, @Type = "SCALAR"]
|
||||||
|
| | +- Statement[@CanonicalImage = null]
|
||||||
|
| | | +- UnlabelledStatement[@CanonicalImage = null]
|
||||||
|
| | | +- ReturnStatement[@CanonicalImage = null]
|
||||||
|
| | | +- Expression[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'"]
|
||||||
|
| | | +- PrimaryPrefix[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'", @SelfModifier = false]
|
||||||
|
| | | +- Literal[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'"]
|
||||||
|
| | | +- StringLiteral[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'", @String = "q[select * from dual]"]
|
||||||
|
| | +- ID[@CanonicalImage = "TEST3", @Image = "test3"]
|
||||||
|
| +- DeclarativeUnit[@CanonicalImage = null]
|
||||||
|
| | +- ProgramUnit[@CanonicalImage = null, @MethodName = "test4", @Name = "test4", @ObjectName = null]
|
||||||
|
| | +- MethodDeclarator[@CanonicalImage = "TEST4", @Image = "test4", @ParameterCount = 1]
|
||||||
|
| | | +- ObjectNameDeclaration[@CanonicalImage = "TEST4", @Image = "test4"]
|
||||||
|
| | | | +- ID[@CanonicalImage = "TEST4", @Image = "test4"]
|
||||||
|
| | | +- FormalParameters[@CanonicalImage = "()", @Image = "()"]
|
||||||
|
| | | +- Datatype[@CanonicalImage = "CLOB", @Image = "CLOB", @TypeImage = "CLOB"]
|
||||||
|
| | | | +- ScalarDataTypeName[@CanonicalImage = "CLOB", @Image = "CLOB"]
|
||||||
|
| | | +- SqlMacroClause[@CanonicalImage = null, @Type = "TABLE"]
|
||||||
|
| | +- Statement[@CanonicalImage = null]
|
||||||
|
| | | +- UnlabelledStatement[@CanonicalImage = null]
|
||||||
|
| | | +- ReturnStatement[@CanonicalImage = null]
|
||||||
|
| | | +- Expression[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'"]
|
||||||
|
| | | +- PrimaryPrefix[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'", @SelfModifier = false]
|
||||||
|
| | | +- Literal[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'"]
|
||||||
|
| | | +- StringLiteral[@CanonicalImage = "\'Q[SELECT * FROM DUAL]\'", @Image = "\'q[select * from dual]\'", @String = "q[select * from dual]"]
|
||||||
|
| | +- ID[@CanonicalImage = "TEST4", @Image = "test4"]
|
||||||
|
| +- DeclarativeUnit[@CanonicalImage = null]
|
||||||
|
| +- ProgramUnit[@CanonicalImage = null, @MethodName = "test5", @Name = "test5", @ObjectName = null]
|
||||||
|
| +- MethodDeclarator[@CanonicalImage = "TEST5", @Image = "test5", @ParameterCount = 1]
|
||||||
|
| | +- ObjectNameDeclaration[@CanonicalImage = "TEST5", @Image = "test5"]
|
||||||
|
| | | +- ID[@CanonicalImage = "TEST5", @Image = "test5"]
|
||||||
|
| | +- FormalParameters[@CanonicalImage = "()", @Image = "()"]
|
||||||
|
| | +- Datatype[@CanonicalImage = "INT", @Image = "INT", @TypeImage = "INT"]
|
||||||
|
| | +- ScalarDataTypeName[@CanonicalImage = "INT", @Image = "INT"]
|
||||||
|
| +- DeclarativeSection[@CanonicalImage = null]
|
||||||
|
| | +- DeclarativeUnit[@CanonicalImage = null]
|
||||||
|
| | +- CursorSpecification[@CanonicalImage = null]
|
||||||
|
| | +- CursorUnit[@CanonicalImage = "C", @Image = "c"]
|
||||||
|
| | +- ID[@CanonicalImage = "C", @Image = "c"]
|
||||||
|
| | +- SelectStatement[@All = false, @CanonicalImage = null, @Distinct = false, @Unique = false]
|
||||||
|
| | +- SelectList[@CanonicalImage = null]
|
||||||
|
| | | +- SqlExpression[@CanonicalImage = "1", @Image = "1"]
|
||||||
|
| | | +- PrimaryPrefix[@CanonicalImage = "1", @Image = "1", @SelfModifier = false]
|
||||||
|
| | | +- Literal[@CanonicalImage = "1", @Image = "1"]
|
||||||
|
| | | +- NumericLiteral[@CanonicalImage = "1", @Image = "1"]
|
||||||
|
| | +- FromClause[@CanonicalImage = null]
|
||||||
|
| | +- TableReference[@CanonicalImage = null]
|
||||||
|
| | +- SchemaName[@CanonicalImage = "TEST", @Image = "test"]
|
||||||
|
| | | +- ID[@CanonicalImage = "TEST", @Image = "test"]
|
||||||
|
| | +- FunctionCall[@CanonicalImage = "TEST1", @Image = "test1"]
|
||||||
|
| | +- FunctionName[@CanonicalImage = "TEST1", @Image = "test1"]
|
||||||
|
| | | +- ID[@CanonicalImage = "TEST1", @Image = "test1"]
|
||||||
|
| | +- Arguments[@ArgumentCount = 0, @CanonicalImage = null]
|
||||||
|
| +- Statement[@CanonicalImage = null]
|
||||||
|
| | +- UnlabelledStatement[@CanonicalImage = null]
|
||||||
|
| | +- ReturnStatement[@CanonicalImage = null]
|
||||||
|
| | +- Expression[@CanonicalImage = "1", @Image = "1"]
|
||||||
|
| | +- PrimaryPrefix[@CanonicalImage = "1", @Image = "1", @SelfModifier = false]
|
||||||
|
| | +- Literal[@CanonicalImage = "1", @Image = "1"]
|
||||||
|
| | +- NumericLiteral[@CanonicalImage = "1", @Image = "1"]
|
||||||
|
| +- ID[@CanonicalImage = "TEST5", @Image = "test5"]
|
||||||
|
+- ID[@CanonicalImage = "TEST", @Image = "test"]
|
Reference in New Issue
Block a user