Affects PMD Version:
This error was testing in the following versions:
Description:
Trying to analyze pl/sql code with XMLQUERY function in SELECT, PMD raises an exception error that indicates "Error while parsing".
Exception Stacktrace:
net.sourceforge.pmd.PMDException: Error while parsing C:\testfolder\example_code.sql
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache(SourceCodeProcessor.java:124)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:100)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCode(SourceCodeProcessor.java:62)
at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:85)
at net.sourceforge.pmd.processor.PmdRunnable.call(PmdRunnable.java:29)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: net.sourceforge.pmd.lang.plsql.ast.ParseException: Encountered " "l_tagname "" at line 19, column 28.
Was expecting one of:
"\'" ...
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.generateParseException(PLSQLParser.java)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.jj_consume_token(PLSQLParser.java)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.StringLiteral(PLSQLParser.java:43899)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.FunctionCall(PLSQLParser.java:14792)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.PrimaryPrefix(PLSQLParser.java:42999)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.PrimaryExpression(PLSQLParser.java:42939)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.IsOfTypeCondition(PLSQLParser.java:42165)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.IsNullCondition(PLSQLParser.java:41651)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.UnaryExpressionNotPlusMinus(PLSQLParser.java:41213)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.UnaryExpression(PLSQLParser.java:41043)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.MultiplicativeExpression(PLSQLParser.java:40595)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.AdditiveExpression(PLSQLParser.java:40481)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.RelationalExpression(PLSQLParser.java:40241)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.EqualityExpression(PLSQLParser.java:40171)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.ConditionalAndExpression(PLSQLParser.java:40123)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.ConditionalOrExpression(PLSQLParser.java:40075)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Expression(PLSQLParser.java:39234)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.FunctionCall(PLSQLParser.java:14786)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.PrimaryPrefix(PLSQLParser.java:42999)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.PrimaryExpression(PLSQLParser.java:42939)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.IsOfTypeCondition(PLSQLParser.java:42165)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.IsNullCondition(PLSQLParser.java:41651)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.UnaryExpressionNotPlusMinus(PLSQLParser.java:41213)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.UnaryExpression(PLSQLParser.java:41043)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.MultiplicativeExpression(PLSQLParser.java:40595)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.AdditiveExpression(PLSQLParser.java:40481)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.SqlExpression(PLSQLParser.java:13477)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.SelectListEntry(PLSQLParser.java:21897)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.SelectList(PLSQLParser.java:21846)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.SelectStatement(PLSQLParser.java:28344)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.UnlabelledStatement(PLSQLParser.java:23769)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Statement(PLSQLParser.java:24671)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.TypeMethod(PLSQLParser.java:49886)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.MethodDeclaration(PLSQLParser.java:7692)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.DeclarativeUnit(PLSQLParser.java:2745)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.DeclarativeSection(PLSQLParser.java:3154)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.PackageBody(PLSQLParser.java:1915)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Input(PLSQLParser.java:135)
at net.sourceforge.pmd.lang.plsql.PLSQLParser.parse(PLSQLParser.java:61)
at net.sourceforge.pmd.lang.AbstractParser.doParse(AbstractParser.java:44)
at net.sourceforge.pmd.SourceCodeProcessor.parse(SourceCodeProcessor.java:136)
at net.sourceforge.pmd.SourceCodeProcessor.processSource(SourceCodeProcessor.java:200)
at net.sourceforge.pmd.SourceCodeProcessor.processSourceCodeWithoutCache(SourceCodeProcessor.java:118)
... 10 more
Code Sample demonstrating the issue:
DECLARE -- l_xml XMLTYPE := XMLTYPE('<Catalog> <Book> <Author>Steven Feuerstein</Author> <Title>Oracle PLSQL Languaje Pocket Reference</Title> <Genre>Programming</Genre> <Price>18.25</Price> <PublishDate>2015-09-04</PublishDate> <Description>A guide to Oracle PLSQL Language Fundamentals.</Description> </Book> </Catalog>'); -- l_tagname VARCHAR2(100) := '$p//Author'; l_result VARCHAR2(4000); -- BEGIN -- SELECT XMLCAST(XMLQUERY(l_tagname PASSING l_xml AS "p" RETURNING CONTENT) AS VARCHAR2(4000)) INTO l_result FROM DUAL; -- DBMS_OUTPUT.put_line(l_result); -- END;
Steps to reproduce:
Running PMD through: [CLI]
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