Merge remote-tracking branch 'adangel/issue-1589' into plsql-parser-fixes2

This commit is contained in:
Andreas Dangel
2019-02-16 20:02:09 +01:00
5 changed files with 25 additions and 1 deletions

View File

@ -39,6 +39,7 @@ This is a {{ site.pmd.release_type }} release.
* [#1632](https://github.com/pmd/pmd/issues/1632): \[java] ConsecutiveLiteralAppends false positive over catch * [#1632](https://github.com/pmd/pmd/issues/1632): \[java] ConsecutiveLiteralAppends false positive over catch
* plsql * plsql
* [#1587](https://github.com/pmd/pmd/issues/1587): \[plsql] Parse Exception with EXISTS * [#1587](https://github.com/pmd/pmd/issues/1587): \[plsql] Parse Exception with EXISTS
* [#1589](https://github.com/pmd/pmd/issues/1589): \[plsql] ParseException with subqueries in WHERE clause
### API Changes ### API Changes

View File

@ -1481,6 +1481,8 @@ ASTSqlExpression SqlExpression() :
LOOKAHEAD(2) Column() LOOKAHEAD(2) Column()
| |
LOOKAHEAD(2) <ROWNUM> LOOKAHEAD(2) <ROWNUM>
|
LOOKAHEAD(2) "(" SelectStatement() ")" // see "Scalar Subquery Expressions"
| |
AdditiveExpression() // this can be a literal or a simple expression, but no conditional AdditiveExpression() // this can be a literal or a simple expression, but no conditional
) )

View File

@ -12,7 +12,7 @@ import org.junit.Test;
import net.sourceforge.pmd.lang.plsql.AbstractPLSQLParserTst; import net.sourceforge.pmd.lang.plsql.AbstractPLSQLParserTst;
public class TableCollectionExpression extends AbstractPLSQLParserTst { public class TableCollectionExpressionTest extends AbstractPLSQLParserTst {
@Test @Test
public void testExamples() throws Exception { public void testExamples() throws Exception {

View File

@ -94,4 +94,11 @@ public class WhereClauseTest extends AbstractPLSQLParserTst {
Assert.assertEquals("'([aeiou])\\1'", regexps.get(1).getPattern().getImage()); Assert.assertEquals("'([aeiou])\\1'", regexps.get(1).getPattern().getImage());
Assert.assertEquals("'i'", regexps.get(1).getMatchParam()); Assert.assertEquals("'i'", regexps.get(1).getMatchParam());
} }
@Test
public void testSubqueries() throws Exception {
String code = IOUtils.toString(this.getClass().getResourceAsStream("WhereClauseSubqueries.pls"),
StandardCharsets.UTF_8);
ASTInput input = parsePLSQL(code);
}
} }

View File

@ -0,0 +1,14 @@
--
-- Where Clause with Subqueries
--
BEGIN
SELECT id INTO v_id FROM my_table
WHERE id = (SELECT id FROM other_table);
UPDATE my_table SET name = 'a'
WHERE id = (SELECT id FROM other_table);
END;
/