diff --git a/pmd-plsql/etc/grammar/PldocAST.jjt b/pmd-plsql/etc/grammar/PldocAST.jjt index a6d3df7886..ef71886a47 100644 --- a/pmd-plsql/etc/grammar/PldocAST.jjt +++ b/pmd-plsql/etc/grammar/PldocAST.jjt @@ -1354,7 +1354,11 @@ ASTGroupingExpressionList GroupingExpressionList() : ASTWhereClause WhereClause() : {} { + ( + LOOKAHEAD(3) Expression() + | Condition() + ) { return jjtThis; } } diff --git a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java index 96440c0b15..3c0b724362 100644 --- a/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java +++ b/pmd-plsql/src/test/java/net/sourceforge/pmd/lang/plsql/ast/WhereClauseTest.java @@ -85,4 +85,9 @@ public class WhereClauseTest extends AbstractPLSQLParserTst { public void testParentheses() { plsql.parseResource("WhereClauseParens.pls"); } + + @Test + public void testCurrentOf() { + plsql.parseResource("WhereCurrentOf.pls"); + } } diff --git a/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereCurrentOf.pls b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereCurrentOf.pls new file mode 100644 index 0000000000..418c4b3cc4 --- /dev/null +++ b/pmd-plsql/src/test/resources/net/sourceforge/pmd/lang/plsql/ast/WhereCurrentOf.pls @@ -0,0 +1,26 @@ +declare + thisstudent student%rowtype; + + cursor maths_student is + select * + from student + where sid in (select sid + from take + where cid = ’cs145’) + for update; + +begin + open maths_student; + loop + fetch maths_student + into thisstudent; + exit when(maths_student%notfound); + if (thisstudent.gpa < 4.0) then + update student + set gpa = 4.0 + where current of maths_student; + end if; + end loop; + + close maths_student; +end;