Affects PMD Version:
This error was testing in the following versions:
Description:
Trying to analyze pl/sql code that has "Less than or equal to/Greater than or equal to" operators (<=; >=), but these operators have a blank space between two characters, for instance > = or < =, PMD raises an exception error indicating "Error while parsing".
Note: This is totally correct in DML statements for Oracle databases engines.
Exception Stacktrace:
net.sourceforge.pmd.PMDException: Error while parsing C:\testfolder\example_procedure.prc
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:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: net.sourceforge.pmd.lang.plsql.ast.ParseException: Encountered " "=" "= "" at line 10, column 23.
Was expecting one of:
"LOG" ...
"(" ...
"REF" ...
"LAST" ...
"*" ...
"+" ...
"OVER" ...
"UNBOUNDED" ...
"PRECEDING" ...
...
"TRIM" ...
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.UnaryExpression(PLSQLParser.java:41132)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.MultiplicativeExpression(PLSQLParser.java:40679)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.AdditiveExpression(PLSQLParser.java:40565)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.SqlExpression(PLSQLParser.java:13560)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.ComparisonCondition(PLSQLParser.java:12848)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Condition2(PLSQLParser.java:12165)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CompoundCondition(PLSQLParser.java:12703)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Condition(PLSQLParser.java:11754)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CompoundCondition(PLSQLParser.java:12675)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Condition(PLSQLParser.java:11754)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CompoundCondition(PLSQLParser.java:12697)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Condition(PLSQLParser.java:11754)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CompoundCondition(PLSQLParser.java:12675)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Condition(PLSQLParser.java:11754)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CompoundCondition(PLSQLParser.java:12697)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Condition(PLSQLParser.java:11754)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CompoundCondition(PLSQLParser.java:12697)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Condition(PLSQLParser.java:11754)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CompoundCondition(PLSQLParser.java:12675)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Condition(PLSQLParser.java:11754)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CompoundCondition(PLSQLParser.java:12724)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Condition(PLSQLParser.java:11754)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CompoundCondition(PLSQLParser.java:12724)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Condition(PLSQLParser.java:11754)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CompoundCondition(PLSQLParser.java:12724)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Condition(PLSQLParser.java:11754)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.WhereClause(PLSQLParser.java:11712)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.RestOfStatement(PLSQLParser.java:10606)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.SelectStatement(PLSQLParser.java:28448)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CursorUnit(PLSQLParser.java:38877)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.CursorSpecification(PLSQLParser.java:38919)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.DeclarativeUnit(PLSQLParser.java:2728)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.DeclarativeSection(PLSQLParser.java:3154)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.ProgramUnit(PLSQLParser.java:6446)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Global(PLSQLParser.java:879)
at net.sourceforge.pmd.lang.plsql.ast.PLSQLParser.Input(PLSQLParser.java:153)
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:
CREATE OR REPLACE PROCEDURE EXAMPLE_PROCEDURE IS
--
l_total_objects NUMBER(10);
--
BEGIN
--
SELECT COUNT(1)
INTO l_total_objects
FROM USER_OBJECTS
WHERE namespace < = 1
OR namespace > = 0;
--
DBMS_OUTPUT.Put_Line('Total number of objects: ' || l_total_objects);
--
END EXAMPLE_PROCEDURE;
Note: By removing all the blank spaces in the operators in the SELECT statement, you will have no parsing problems.
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