Menu

#91 Get parse error when use a plsql keyword as a name

open
5
2013-08-04
2012-03-28
No

PLDoc: 1.1.2
Oracle: 11.2.0.1.0

If I have the following plsql:

CREATE OR REPLACE PACKAGE TESTCONSTANTS IS

map CONSTANT VARCHAR2(4) := 'map';

END;
/

CREATE OR REPLACE PACKAGE BODY TEST_API IS

PROCEDURE Test
IS

BEGIN

dbms_output.put_line (TESTCONSTANTS.map);

END Test;

END;
/

Then I get a parse exception:

ParseException at package <test_api.pkb>: net.sourceforge.pldoc.parser.ParseException: Encountered "
"." ". "" at line 15, column 38.
Was expecting one of:
"/" ...
"," ...
")" ...

But it is accepted fine by plsql.

Related

Bugs: #91

Discussion

  • Stuart Turton

    Stuart Turton - 2012-04-26

    STATIC added and checked.

    The problem is that most keywords are usable as names, but allowing all such keywords in one go tends to break the PL/SQL parser.

    I will attempt to add and test them one or two at a time (STATIC keyword just added and an unreserved keyword).

    The problem ones are:-
    "
    Token ID(): {}
    {
    (<IDENTIFIER>
    | <QUOTED_LITERAL>
    | KEYWORD_UNRESERVED() //SRT 2011-04-17
    /*KEYWORDS_UNRESERVED
    |<EXTRACT> | <FALSE> | <TRUE> | <SECOND> | <MINUTE> | <HOUR> | <DAY> | <MONTH> | <YEAR>
    | <NO> |<ROW> | <COMMENT> | <CURSOR>
    */
    |
    <REPLACE> | <DEFINER> | <SERIALLY_REUSABLE> | <RESTRICT_REFERENCES> |
    <EXCEPTION_INIT> | <AUTONOMOUS_TRANSACTION> // | <LANGUAGE>
    |
    <ALL> | <ALTER> | <AND> | <ANY> | <ARRAY> | <AS> | <ASC> | <AT> | <AUTHID> | <AVG> |
    // <BEGIN> |
    <BETWEEN> | <BINARY_INTEGER> | <BODY> | <BOOLEAN> | <BULK> | <BY> | <BYTE> |
    <CASE> | <CHAR> | <CHAR_BASE> | <CHECK> | <CLOSE> | <CLUSTER> |//-<COALESCE> |
    <COLLECT> | <COMPRESS> | <CONNECT> | <CONSTANT> | <CREATE> |
    <CURRENT> | <CURRVAL> | <DATE> | <DECLARE> | <DECIMAL> |
    <_DEFAULT> | <DELETE> | <DESC> | <DISTINCT> | <DO> | <DROP> | <ELSE> | <ELSIF> |
    // <END> |<CURRENT_USER> |
    <EXCEPTION> | <EXCLUSIVE> | <EXECUTE> | <EXISTS> | <EXIT> | <EXTENDS>
    | <FETCH> | <FLOAT> | <FOR> | <FORALL> | <FROM> |
    // <COMMIT> | <FUNCTION> | // this causes bug 643043 Procedure w/o params appears as variable
    <GOTO> | <GROUP> | <HAVING> | <HEAP> | <IF> | <IMMEDIATE> | <IN> |
    <INDEX> | <INDICATOR> | <INSERT> | <INTEGER> | <INTERFACE> | <INTERSECT> | <INTERVAL> |
    <INTO> | <IS> | <ISOLATION> | <JAVA> | <LEVEL> | <LIKE> | <LIMITED> | <LOCK> |
    <LONG> | <LOOP> | <MAX> | <MIN> | <MINUS> | <MLSLABEL> | <MOD> | <MODE> |
    <NATURAL> | <NATURALN> | <NEXTVAL> | <NOCOPY> | <NOT> | <NOWAIT> |
    <NULL> | <NULLIF> | <NUMBER> | <NUMBER_BASE> | <OCIROWID> | <OF> | <ON> | <OPAQUE> |
    <BFILE_BASE> |
    <BLOB_BASE> |
    //<CHAR_BASE> |
    <CLOB_BASE> |
    <DATE_BASE> |
    <OPEN> | <OPERATOR> | <OPTION> | <OR> | <ORDER> | <ORGANIZATION> //| <OTHERS>
    | <OUT> |
    <PACKAGE> | <PCTFREE> | <PLS_INTEGER> | <POSITIVE> | <POSITIVEN> |
    // <PRAGMA> |<PARTITION> | <RANGE> | <NEW> | <OLD> |
    <PRIOR> | <PRIVATE> | <PROMPT> |
    // <PROCEDURE> | // this causes bug 643043 Procedure w/o params appears as variable
    <PUBLIC> | <RAISE> | <RAW> | <REAL> |
    //<RECORD> | <RETURN> | <SET> |<REF> |
    <RELEASE> | <REVERSE> | <ROLLBACK> | <ROWID> |
    <ROWNUM> | <ROWTYPE> | <SAVEPOINT> | <SELECT> | <SEPARATE> | <SHARE> |
    <SMALLINT> | <SQL> | <SQLCODE> | <SQLERRM> | <START> | <STDDEV> | // <SUBTYPE> |
    <SUCCESSFUL> | <SUM> | <SYNONYM> | <SYSDATE> | <TABLE> | <THEN> |
    //<SPACE> | <TIME> | <TIMESTAMP> | <TIMEZONE_REGION> | <TIMEZONE_ABBR> | <TIMEZONE_MINUTE> | <TIMEZONE_HOUR> |
    <TO> | <TRIGGER> |
    <TYPE> | <UI> | <UPDATE>
    |
    <VARCHAR> | <VARCHAR2> | <DOUBLE> | <DEC> | <PRECISION> | <INT> |
    <NUMERIC> | <SIGNTYPE> | <NCHAR> | <NVARCHAR2> | <STRING> | <UROWID> | <VARRAY> | <VARYING> | <BFILE> |
    <BLOB> | <CLOB> | <NCLOB> | <WITH> | <WHILE> // | <LOCAL> | <ZONE> | <CHARACTER>
    //| <PARENT> | <MEMBER>
    | <CONSTRUCTOR> | <OBJECT>
    //PLDoc Bug 3512150 | <STATIC>
    | <UNDER> | <RESULT>
    | <FINAL> | <INSTANTIABLE>
    // PlDoc Bug 3512150 | <MAP>
    | <OVERRIDING>
    | <OID>
    | <AGGREGATE>
    //| <SYS_REFCURSOR>
    | <JAVA_INTERFACE_CLASS> | <SQLDATA_CLASS> | <CUSTOMDATUM_CLASS> | <ORADATA_CLASS>
    | <EXTERNAL>
    //SRT 20090608 ALTER TYPE key words
    //| <ADD>
    //PLDoc Bug 3512149 | <ATTRIBUTE>
    //| <ELEMENT>
    //| <LIMIT>
    | <MODIFY>
    //SRT 20110524 | <SELF>
    )
    { return token; }
    }

    "

     
  • Stuart Turton

    Stuart Turton - 2012-05-09

    Addressed in PLDoc 1.1.3

     
  • Steve

    Steve - 2013-07-31

    I think I am getting this same bug, in 1.5.5 of pldoc and maven plugin 3.0.1. We have a procedure called 'rename' and its causing an error:

    ParseException at package </Users>: net.sourceforge.pldoc.parser.ParseException: Encountered " "RENAME" "rename "" at line 94, column 13.

     
  • Stuart Turton

    Stuart Turton - 2013-08-04

    Try 1.5.6 / 3.0.2

    It seems that even though it is a reserved word (in V$RESERVED_WORDS), it may be used in PL/SQL

     
  • Steve

    Steve - 2013-08-05

    That did the trunk, cheers Stuart.

    On 04/08/2013, at 6:40 PM, Stuart Turton sturton@users.sf.net wrote:

    Try 1.5.6 / 3.0.2

    It seems that even though it is a reserved word (in V$RESERVED_WORDS), it may be used in PL/SQL
    [bugs:#91] Get parse error when use a plsql keyword as a name

    Status: open
    Labels: Java version
    Created: Wed Mar 28, 2012 01:37 AM UTC by Gary Bentley
    Last Updated: Wed Jul 31, 2013 01:51 AM UTC
    Owner: Albert Tumanov

    PLDoc: 1.1.2
    Oracle: 11.2.0.1.0

    If I have the following plsql:

    CREATE OR REPLACE PACKAGE TESTCONSTANTS IS

    map CONSTANT VARCHAR2(4) := 'map';

    END;
    /

    CREATE OR REPLACE PACKAGE BODY TEST_API IS

    PROCEDURE Test
    IS

    BEGIN

    dbms_output.put_line (TESTCONSTANTS.map);

    END Test;

    END;
    /

    Then I get a parse exception:

    ParseException at package <test_api.pkb>: net.sourceforge.pldoc.parser.ParseException: Encountered "
    "." ". "" at line 15, column 38.
    Was expecting one of:
    "/" ...
    "," ...
    ")" ...

    But it is accepted fine by plsql.

    Sent from sourceforge.net because you indicated interest in https://sourceforge.net/p/pldoc/bugs/91/

    To unsubscribe from further messages, please visit https://sourceforge.net/auth/subscriptions/

     

    Related

    Bugs: #91


Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.