From c651e92ca5ea761ed2e28e86f22fcb2b34c08021 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 30 May 2019 22:18:41 +0200 Subject: [PATCH] Fix plsql grammar --- pmd-plsql/etc/grammar/PldocAST.jjt | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index 77e2a25fc0..cd13423293 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -27,6 +27,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** + * Various fixes for INSERT INTO with records, implicit cursor attributes + * and trim expression. + * + * Hugo Araya Nash 05/2019 + *==================================================================== * Added support for XMLTABLE, XMLEXISTS, XMLCAST, XMLQUERY, CAST, XMLFOREST * and XMLELEMENT * @@ -1536,6 +1541,7 @@ ASTSimpleExpression SimpleExpression() : ( "*" | Column() ) { sb.append(token.image); } | // 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.image); } "%" ( LOOKAHEAD({isKeyword("isopen")}) KEYWORD("ISOPEN") | LOOKAHEAD({isKeyword("found")}) KEYWORD("FOUND") @@ -2284,7 +2290,12 @@ ASTInsertIntoClause InsertIntoClause() : ASTValuesClause ValuesClause() : {} { - [ "(" ( Expression() | <_DEFAULT> ) ( "," ( Expression() | <_DEFAULT> ) )* ")" | ] + + ( + "(" ( Expression() | <_DEFAULT> ) ( "," ( Expression() | <_DEFAULT> ) )* ")" + | + ID() // that's a record variable name + ) { return jjtThis; } } ASTMultiTableInsert MultiTableInsert() : @@ -2905,12 +2916,14 @@ ASTTrimExpression TrimExpression() : { PLSQLNode simpleNode = null; StringBuilder sb = new StringBuilder() ; } { ( - "(" { sb.append("(");} - [ [ ( | | ) { sb.append(" "); sb.append(token.toString()); } ] - [ { sb.append(" "); sb.append(token.image); } ] - ( ) { sb.append(token.image); } ] - simpleNode = StringExpression() { sb.append(" "); sb.append(simpleNode.getImage()); } - ")" { sb.append(")");} + "(" { sb.append("(");} + [ LOOKAHEAD(2) + [ ( | | ) { sb.append(" "); sb.append(token.toString()); } ] + [ simpleNode = StringExpression() { sb.append(" "); sb.append(simpleNode.getImage()); } ] + ( ) { sb.append(" ").append(token.image); } + ] + simpleNode = StringExpression() { sb.append(" "); sb.append(simpleNode.getImage()); } + ")" { sb.append(")");} ) { jjtThis.setImage(sb.toString()); return jjtThis;