Affects PMD Version:
PMD 7.9.0 (10b47319e42bb817df69d29196ceca8fdb94b461, 2024-12-27T12:29:08Z)
Java version: 21.0.6, vendor: Ubuntu, runtime: /usr/lib/jvm/java-21-openjdk-amd64
Description:
A relatively simple SQL expression takes overly long to parse and eventually fails. While I believe the SQL expression such as it is isn't valid(?), the actual failure happened in a nested context where the parser didn't finish even within half an hour, at which point I stopped it.
The full example that I wanted to have it parse is https://github.com/Qualtagh/OracleDBUtils/blob/master/p_utils_tests.sql#10, while the nested context I was referring to is at line 30:
XMLAgg( XMLElement( "elem", NAME ) order by SURNAME )
Exception Stacktrace:
% time pmd ast-dump --language=plsql -i <<EOF select a(b('' order by c)); EOF Reading from stdin... net.sourceforge.pmd.lang.ast.ParseException: Parse exception in file 'stdin' at line 1, column 15: Encountered "ORDER". Was expecting one of: [0/1627] ")" ... "," ... "=" ... "<" ... "!" ... "~" ... "+" ... "-" ... "^" ... ">" ... "||" ... "AND" ... "BETWEEN" ... "DEFAULT" ... "IN" ... "IS" ... "LIKE" ... "NOT" ... "ON" ... "OR" ... "MEMBER" ... "USING" ... "MULTISET" ... "SUBMULTISET" ... at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.generateParseException(PLSQLParserImpl.java) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.jj_consume_token(PLSQLParserImpl.java) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.Arguments(PLSQLParserImpl.java:48106) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.FunctionCall(PLSQLParserImpl.java:16885) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.PrimaryPrefix(PLSQLParserImpl.java:46183) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.PrimaryExpression(PLSQLParserImpl.java:46123) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.IsOfTypeCondition(PLSQLParserImpl.java:45365) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.IsNullCondition(PLSQLParserImpl.java:44859) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.UnaryExpressionNotPlusMinus(PLSQLParserImpl.java:44422) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.UnaryExpression(PLSQLParserImpl.java:44252) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.MultiplicativeExpression(PLSQLParserImpl.java:43811) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.AdditiveExpression(PLSQLParserImpl.java:43697) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.RelationalExpression(PLSQLParserImpl.java:43457) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.EqualityExpression(PLSQLParserImpl.java:43387) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.ConditionalAndExpression(PLSQLParserImpl.java:43339) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.ConditionalOrExpression(PLSQLParserImpl.java:43291) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.Expression(PLSQLParserImpl.java:42378) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.Argument(PLSQLParserImpl.java:48200) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.ArgumentList(PLSQLParserImpl.java:48138) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.Arguments(PLSQLParserImpl.java:48086) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.FunctionCall(PLSQLParserImpl.java:16885) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.PrimaryPrefix(PLSQLParserImpl.java:46183) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.PrimaryExpression(PLSQLParserImpl.java:46123) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.IsOfTypeCondition(PLSQLParserImpl.java:45365) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.IsNullCondition(PLSQLParserImpl.java:44859) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.UnaryExpressionNotPlusMinus(PLSQLParserImpl.java:44422) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.UnaryExpression(PLSQLParserImpl.java:44252) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.MultiplicativeExpression(PLSQLParserImpl.java:43811) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.AdditiveExpression(PLSQLParserImpl.java:43697) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.SqlExpression(PLSQLParserImpl.java:14067) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.SelectListEntry(PLSQLParserImpl.java:22345) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.SelectList(PLSQLParserImpl.java:22294) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.SelectStatement(PLSQLParserImpl.java:29482) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParserImpl.Input(PLSQLParserImpl.java:189) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.parseImpl(PLSQLParser.java:86) at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.parseImpl(PLSQLParser.java:21) at net.sourceforge.pmd.lang.ast.impl.javacc.JjtreeParserAdapter.parse(JjtreeParserAdapter.java:36) at net.sourceforge.pmd.util.treeexport.TreeExporter.run(TreeExporter.java:84) at net.sourceforge.pmd.util.treeexport.TreeExporter.export(TreeExporter.java:59) at net.sourceforge.pmd.cli.commands.internal.TreeExportCommand.execute(TreeExportCommand.java:111) at net.sourceforge.pmd.cli.commands.internal.AbstractPmdSubcommand.call(AbstractPmdSubcommand.java:30) at net.sourceforge.pmd.cli.commands.internal.AbstractPmdSubcommand.call(AbstractPmdSubcommand.java:16) at picocli.CommandLine.executeUserObject(CommandLine.java:2045) at picocli.CommandLine.access$1500(CommandLine.java:148) at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2465) at picocli.CommandLine$RunLast.handle(CommandLine.java:2457) at picocli.CommandLine$RunLast.handle(CommandLine.java:2419) at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277) at picocli.CommandLine$RunLast.execute(CommandLine.java:2421) at picocli.CommandLine.execute(CommandLine.java:2174) at net.sourceforge.pmd.cli.PmdCli.main(PmdCli.java:24) pmd ast-dump --language=plsql -i <<<'' 9.40s user 0.23s system 108% cpu 8.865 total
Code Sample demonstrating the issue:
select a(b('' order by c));
Running PMD through: CLI
% java -version
openjdk version "21.0.6" 2025-01-21
OpenJDK Runtime Environment (build 21.0.6+7-Ubuntu-124.04.1)
OpenJDK 64-Bit Server VM (build 21.0.6+7-Ubuntu-124.04.1, mixed mode, sharing)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4