forked from phoedos/pmd
@ -18,6 +18,8 @@ This is a {{ site.pmd.release_type }} release.
|
||||
|
||||
* java-bestpractices
|
||||
* [#658](https://github.com/pmd/pmd/issues/658): \[java] OneDeclarationPerLine: False positive for loops
|
||||
* plsql
|
||||
* [#1508](https://github.com/pmd/pmd/issues/1508): \[plsql] Parse Exception when using SELECT COUNT(*)
|
||||
|
||||
### API Changes
|
||||
|
||||
|
@ -1486,7 +1486,7 @@ void SelectListEntry() #void :
|
||||
ASTColumnAlias ColumnAlias() :
|
||||
{}
|
||||
{
|
||||
<IDENTIFIER> { jjtThis.setImage(token.image); }
|
||||
( <IDENTIFIER> | <QUOTED_LITERAL> ) { jjtThis.setImage(token.image); }
|
||||
{ return jjtThis; }
|
||||
}
|
||||
|
||||
@ -1549,7 +1549,7 @@ ASTTableReference TableReference() :
|
||||
"(" Subquery() ")"
|
||||
)
|
||||
|
||||
[ TableAlias() ]
|
||||
[ LOOKAHEAD(2) TableAlias() ]
|
||||
|
||||
{ return jjtThis; }
|
||||
}
|
||||
@ -2983,9 +2983,8 @@ ASTArguments Arguments() :
|
||||
}
|
||||
{
|
||||
//"(" [ ArgumentList() ] ")"
|
||||
("(")
|
||||
[ (ArgumentList()) ]
|
||||
(")")
|
||||
|
||||
"(" [ [<ALL> | <DISTINCT> | <UNIQUE>] ("*" | ArgumentList()) ] ")"
|
||||
{
|
||||
return jjtThis ;
|
||||
}
|
||||
@ -3362,7 +3361,7 @@ ASTTypeSpecification TypeSpecification() :
|
||||
(
|
||||
<UNDER> ObjectNameDeclaration() //SUBTYPE
|
||||
| LOOKAHEAD(2) (<IS> | <AS> ) <OBJECT> // OBJECT TYPE
|
||||
| LOOKAHEAD(2) (<IS> | <AS> ) <OPAQUE> <VARYING> "(*)" // OPAQUE TYPE
|
||||
| LOOKAHEAD(2) (<IS> | <AS> ) <OPAQUE> <VARYING> "(" "*" ")" // OPAQUE TYPE
|
||||
<USING> <LIBRARY> (<IDENTIFIER> | <QUOTED_LITERAL> | StringLiteral() )
|
||||
[ "." (<IDENTIFIER> | <QUOTED_LITERAL> | StringLiteral() ) ]
|
||||
| LOOKAHEAD(2) (<IS> | <AS> ) CollectionTypeName() <OF> Datatype()
|
||||
|
@ -17,10 +17,18 @@ public class SelectExpressionsTest extends AbstractPLSQLParserTst {
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void parseSelectCount() throws Exception {
|
||||
public void parseSelectExpression() throws Exception {
|
||||
String code = IOUtils.toString(this.getClass().getResourceAsStream("SelectExpressions.pls"),
|
||||
StandardCharsets.UTF_8);
|
||||
ASTInput input = parsePLSQL(code);
|
||||
Assert.assertNotNull(input);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseSelectCount() throws Exception {
|
||||
String code = IOUtils.toString(this.getClass().getResourceAsStream("SelectCount.pls"),
|
||||
StandardCharsets.UTF_8);
|
||||
ASTInput input = parsePLSQL(code);
|
||||
Assert.assertNotNull(input);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,23 @@
|
||||
DECLARE
|
||||
bonus NUMBER(8,2);
|
||||
BEGIN
|
||||
|
||||
SELECT COUNT(*) INTO x FROM y1;
|
||||
SELECT COUNT (*) INTO x FROM y2;
|
||||
SELECT COUNT ( * ) INTO x FROM y2;
|
||||
SELECT COUNT(DISTINCT other_id) INTO x FROM y3;
|
||||
SELECT COUNT(ALL other_id) INTO x FROM y3;
|
||||
SELECT COUNT(UNIQUE other_id) INTO x FROM y3;
|
||||
|
||||
SELECT
|
||||
some_col "alias in quotes"
|
||||
INTO some_record
|
||||
FROM some_table;
|
||||
|
||||
SELECT
|
||||
COUNT(*) "Total Empl"
|
||||
INTO some_record
|
||||
FROM some_table;
|
||||
|
||||
END;
|
||||
/
|
@ -4,17 +4,6 @@
|
||||
|
||||
BEGIN
|
||||
|
||||
SELECT
|
||||
some_col "alias in quotes"
|
||||
INTO some_record
|
||||
FROM some_table;
|
||||
|
||||
|
||||
SELECT
|
||||
COUNT(*) "Total Empl"
|
||||
INTO some_record
|
||||
FROM some_table;
|
||||
|
||||
SELECT
|
||||
AVG(salary) * 12 "Average Sal"
|
||||
INTO some_record
|
||||
|
Reference in New Issue
Block a user