fix for trim function with record type variable

This commit is contained in:
Piotr Szymanski
2019-08-14 11:51:12 +02:00
parent fac5604d63
commit 28b67091f0
3 changed files with 40 additions and 8 deletions

View File

@@ -2937,21 +2937,18 @@ ASTTrimExpression TrimExpression() :
{ PLSQLNode simpleNode = null; StringBuilder sb = new StringBuilder() ; }
{
(
"(" { sb.append("(");}
[ LOOKAHEAD(2)
[ ( <LEADING> | <TRAILING> | <BOTH> ) { sb.append(" "); sb.append(token.toString()); } ]
[ simpleNode = StringExpression() { sb.append(" "); sb.append(simpleNode.getImage()); } ]
( <FROM> ) { sb.append(" ").append(token.image); }
]
"(" { sb.append("(");}
[ ( <LEADING> | <TRAILING> | <BOTH> ) { sb.append(" "); sb.append(token.toString()); } ]
[ LOOKAHEAD(StringExpression() <FROM>) simpleNode = StringExpression() { sb.append(" "); sb.append(simpleNode.getImage()); } ]
[ <FROM> { sb.append(" ").append(token.image); } ]
simpleNode = StringExpression() { sb.append(" "); sb.append(simpleNode.getImage()); }
")" { sb.append(")");}
")" { sb.append(")");}
)
{
jjtThis.setImage(sb.toString()); return jjtThis;
}
}
/*
TREAT ( Expression AS datatype)
CAST ( Expression AS datatype)

View File

@@ -0,0 +1,24 @@
/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.plsql.ast;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Test;
import net.sourceforge.pmd.lang.plsql.AbstractPLSQLParserTst;
public class TrimWithRecordTypeTest extends AbstractPLSQLParserTst {
@Test
public void parseTrimWithRecordType() throws Exception {
String code = IOUtils.toString(this.getClass().getResourceAsStream("TrimWithRecordType.pls"),
StandardCharsets.UTF_8);
ASTInput input = parsePLSQL(code);
Assert.assertNotNull(input);
}
}

View File

@@ -0,0 +1,11 @@
CREATE OR REPLACE PACKAGE BODY trim_test_package IS
PROCEDURE trim_test_procedure IS
BEGIN
IF TRIM(var_package.wer.wer) = 'TEST' THEN
NULL;
END IF;
END;
END trim_test_package;
/