Uploaded image for project: 'Apache Trafodion (Retired)'
  1. Apache Trafodion (Retired)
  2. TRAFODION-3131

Use of reserved words as names fails in many places

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.3
    • 2.3
    • sql-cmp
    • None

    Description

      It should be possible to use a reserved word (e.g., "YEAR") as an identifier if it is made into a delimited identifier (that is, upper-cased and surrounded with double-quotes). The sqlci session below demonstrates several examples where this fails:

      >>obey jira.sql;
      >>-- script to reproduce various problems with reserved words
      >>
      >>?section tablename
      >>
      >>-- reserved word as a table name fails in various places
      >>
      >>create table "DELETE" (c1 int);

      — SQL operation complete.
      >>invoke "DELETE";

          • ERROR[15001] A syntax error occurred at or before:
            TABLE TRAFODION.SCH.DELETE;
            ^ (26 characters from start of SQL statement)
          • ERROR[15001] A syntax error occurred at or before:
            TABLE ;
            ^ (7 characters from start of SQL statement)
          • ERROR[8822] The statement was not prepared.

      >>showddl "DELETE";

      CREATE TABLE TRAFODION.SCH.DELETE
      (
      C1 INT DEFAULT NULL NOT SERIALIZED
      )
      ATTRIBUTES ALIGNED FORMAT
      ;

      – GRANT SELECT, INSERT, DELETE, UPDATE, REFERENCES ON TRAFODION.SCH.DELETE TO DB__ROOT WITH GRANT OPTION;

      — SQL operation complete.
      >>insert into "DELETE" values (1);

          • ERROR[8448] Unable to access Hbase interface. Call to ExpHbaseInterface::checkAndInsertRow returned error HBASE_ACCESS_ERROR(-706). Cause: java.lang.IllegalArgumentException: Table qualifier must not be empty
            org.apache.hadoop.hbase.TableName.isLegalTableQualifierName(TableName.java:179)
            org.apache.hadoop.hbase.TableName.isLegalTableQualifierName(TableName.java:149)
            org.apache.hadoop.hbase.TableName.<init>(TableName.java:322)
            org.apache.hadoop.hbase.TableName.createTableNameIfNecessary(TableName.java:358)
            org.apache.hadoop.hbase.TableName.valueOf(TableName.java:418)
            org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:274)
            org.apache.hadoop.hbase.client.transactional.TransactionalTable.<init>(TransactionalTable.java:138)
            org.apache.hadoop.hbase.client.transactional.RMInterface.<init>(RMInterface.java:159)
            org.trafodion.sql.HTableClient.init(HTableClient.java:348)
            org.trafodion.sql.HBaseClient.getHTableClient(HBaseClient.java:1008)
            org.trafodion.sql.HBaseClient.insertRow(HBaseClient.java:1964).

      — 0 row(s) inserted.
      >>delete from "DELETE" where c1=1;

          • ERROR[8448] Unable to access Hbase interface. Call to ExpHbaseInterface::scanOpen returned error HBASE_OPEN_ERROR(-704). Cause: java.lang.IllegalArgumentException: Table qualifier must not be empty
            org.apache.hadoop.hbase.TableName.isLegalTableQualifierName(TableName.java:179)
            org.apache.hadoop.hbase.TableName.isLegalTableQualifierName(TableName.java:149)
            org.apache.hadoop.hbase.TableName.<init>(TableName.java:322)
            org.apache.hadoop.hbase.TableName.createTableNameIfNecessary(TableName.java:358)
            org.apache.hadoop.hbase.TableName.valueOf(TableName.java:418)
            org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:274)
            org.apache.hadoop.hbase.client.transactional.TransactionalTable.<init>(TransactionalTable.java:138)
            org.apache.hadoop.hbase.client.transactional.RMInterface.<init>(RMInterface.java:159)
            org.trafodion.sql.HTableClient.init(HTableClient.java:348)
            org.trafodion.sql.HBaseClient.getHTableClient(HBaseClient.java:1008).

      — 0 row(s) deleted.
      >>update "DELETE" set c1=2 where c1=1;

          • ERROR[8448] Unable to access Hbase interface. Call to ExpHbaseInterface::scanOpen returned error HBASE_OPEN_ERROR(-704). Cause: java.lang.IllegalArgumentException: Table qualifier must not be empty
            org.apache.hadoop.hbase.TableName.isLegalTableQualifierName(TableName.java:179)
            org.apache.hadoop.hbase.TableName.isLegalTableQualifierName(TableName.java:149)
            org.apache.hadoop.hbase.TableName.<init>(TableName.java:322)
            org.apache.hadoop.hbase.TableName.createTableNameIfNecessary(TableName.java:358)
            org.apache.hadoop.hbase.TableName.valueOf(TableName.java:418)
            org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:274)
            org.apache.hadoop.hbase.client.transactional.TransactionalTable.<init>(TransactionalTable.java:138)
            org.apache.hadoop.hbase.client.transactional.RMInterface.<init>(RMInterface.java:159)
            org.trafodion.sql.HTableClient.init(HTableClient.java:348)
            org.trafodion.sql.HBaseClient.getHTableClient(HBaseClient.java:1008).

      — 0 row(s) updated.
      >>select * from "DELETE";

          • ERROR[8448] Unable to access Hbase interface. Call to ExpHbaseInterface::scanOpen returned error HBASE_OPEN_ERROR(-704). Cause: java.lang.IllegalArgumentException: Table qualifier must not be empty
            org.apache.hadoop.hbase.TableName.isLegalTableQualifierName(TableName.java:179)
            org.apache.hadoop.hbase.TableName.isLegalTableQualifierName(TableName.java:149)
            org.apache.hadoop.hbase.TableName.<init>(TableName.java:322)
            org.apache.hadoop.hbase.TableName.createTableNameIfNecessary(TableName.java:358)
            org.apache.hadoop.hbase.TableName.valueOf(TableName.java:418)
            org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:274)
            org.apache.hadoop.hbase.client.transactional.TransactionalTable.<init>(TransactionalTable.java:138)
            org.apache.hadoop.hbase.client.transactional.RMInterface.<init>(RMInterface.java:159)
            org.trafodion.sql.HTableClient.init(HTableClient.java:348)
            org.trafodion.sql.HBaseClient.getHTableClient(HBaseClient.java:1008).

      — 0 row(s) selected.
      >>update statistics for table "DELETE" on every column;

          • ERROR[15001] A syntax error occurred at or before:
            TABLE TRAFODION.SCH.DELETE;
            ^ (26 characters from start of SQL statement)
          • ERROR[15001] A syntax error occurred at or before:
            TABLE ;
            ^ (7 characters from start of SQL statement)

      — SQL operation failed with errors.
      >>drop table "DELETE";

      — SQL operation complete.
      >>
      >>?section viewref
      >>
      >>-- referencing a column name using a reserved word doesn't work from a view
      >>
      >>drop table if exists mytable cascade;

      — SQL operation complete.
      >>create table mytable (c1 int default 1, "YEAR" int);

      — SQL operation complete.
      >>create index myidx on mytable ("YEAR");

      — SQL operation complete.
      >>insert into mytable ("YEAR") values (1);

      — 1 row(s) inserted.
      >>select "YEAR" from mytable where "YEAR" > 0;

      YEAR
      -----------

      1

      — 1 row(s) selected.
      >>
      >>create view myview1 as select * from mytable;

      — SQL operation complete.
      >>showddl myview1;

      CREATE VIEW TRAFODION.SCH.MYVIEW1 AS
      SELECT TRAFODION.SCH.MYTABLE.C1, TRAFODION.SCH.MYTABLE.YEAR FROM
      TRAFODION.SCH.MYTABLE ;

      – GRANT SELECT, INSERT, DELETE, UPDATE, REFERENCES ON TRAFODION.SCH.MYVIEW1 TO DB__ROOT WITH GRANT OPTION;

      — SQL operation complete.
      >>select * from myview1;

          • ERROR[15001] A syntax error occurred at or before:
            CREATE VIEW TRAFODION.SCH.MYVIEW1 AS SELECT TRAFODION.SCH.MYTABLE.C1, TRAFODION
            .SCH.MYTABLE.YEAR FROM TRAFODION.SCH.MYTABLE;
            ^ (96 characters from start of SQL statement)
          • ERROR[8822] The statement was not prepared.

      >>
      >>create view myview2 as select "YEAR" from mytable;

      — SQL operation complete.
      >>showddl myview2;

      CREATE VIEW TRAFODION.SCH.MYVIEW2 AS
      SELECT TRAFODION.SCH.MYTABLE.YEAR FROM TRAFODION.SCH.MYTABLE ;

      – GRANT SELECT, INSERT, DELETE, UPDATE, REFERENCES ON TRAFODION.SCH.MYVIEW2 TO DB__ROOT WITH GRANT OPTION;

      — SQL operation complete.
      >>select * from myview2;

          • ERROR[15001] A syntax error occurred at or before:
            CREATE VIEW TRAFODION.SCH.MYVIEW2 AS SELECT TRAFODION.SCH.MYTABLE.YEAR FROM TRA
            ^ (70 characters from start of SQL statement)
          • ERROR[8822] The statement was not prepared.

      >>
      >>create view myview3 as select * from mytable where "YEAR" > 0;

      — SQL operation complete.
      >>showddl myview3;

      CREATE VIEW TRAFODION.SCH.MYVIEW3 AS
      SELECT TRAFODION.SCH.MYTABLE.C1, TRAFODION.SCH.MYTABLE.YEAR FROM
      TRAFODION.SCH.MYTABLE WHERE TRAFODION.SCH.MYTABLE.YEAR > 0 ;

      – GRANT SELECT, INSERT, DELETE, UPDATE, REFERENCES ON TRAFODION.SCH.MYVIEW3 TO DB__ROOT WITH GRANT OPTION;

      — SQL operation complete.
      >>select * from myview3;

          • ERROR[15001] A syntax error occurred at or before:
            CREATE VIEW TRAFODION.SCH.MYVIEW3 AS SELECT TRAFODION.SCH.MYTABLE.C1, TRAFODION
            .SCH.MYTABLE.YEAR FROM TRAFODION.SCH.MYTABLE WHERE TRAFODION.SCH.MYTABLE.YEAR >
            ^ (96 characters from start of SQL statement)
          • ERROR[8822] The statement was not prepared.

      >>
      >>create view myview4 as select * from myview1;

          • ERROR[15001] A syntax error occurred at or before:
            CREATE VIEW TRAFODION.SCH.MYVIEW1 AS SELECT TRAFODION.SCH.MYTABLE.C1, TRAFODION
            .SCH.MYTABLE.YEAR FROM TRAFODION.SCH.MYTABLE;
            ^ (96 characters from start of SQL statement)

      — SQL operation failed with errors.
      >>showddl myview4;

          • ERROR[4082] Object TRAFODION.SCH.MYVIEW4 does not exist or is inaccessible.
          • ERROR[8822] The statement was not prepared.

      >>select * from myview4;

          • ERROR[4082] Object TRAFODION.SCH.MYVIEW4 does not exist or is inaccessible.
          • ERROR[8822] The statement was not prepared.

      >>
      >>drop table mytable cascade;

      — SQL operation complete.
      >>
      >>?section ctas
      >>
      >>-- "create table as" fails when column name is a reserved word
      >>
      >>drop table if exists t1;

      — SQL operation complete.
      >>drop table if exists t2;

      — SQL operation complete.
      >>drop table if exists t3;

      — SQL operation complete.
      >>drop table if exists t4;

      — SQL operation complete.
      >>
      >>create table t1 ("YEAR" int);

      — SQL operation complete.
      >>showddl t1;

      CREATE TABLE TRAFODION.SCH.T1
      (
      YEAR INT DEFAULT NULL NOT SERIALIZED
      )
      ATTRIBUTES ALIGNED FORMAT
      ;

      – GRANT SELECT, INSERT, DELETE, UPDATE, REFERENCES ON TRAFODION.SCH.T1 TO DB__ROOT WITH GRANT OPTION;

      — SQL operation complete.
      >>create table t2 as select * from t1;

          • ERROR[15001] A syntax error occurred at or before:
            CREATE TABLE TRAFODION.SCH.T2 ( YEAR INT );
            ^ (36 characters from start of SQL statement)
          • ERROR[8822] The statement was not prepared.

      — 0 row(s) inserted.
      >>showddl t2;

          • ERROR[4082] Object TRAFODION.SCH.T2 does not exist or is inaccessible.
          • ERROR[8822] The statement was not prepared.

      >>create table t3 ("YEAR" int not null primary key);

      — SQL operation complete.
      >>showddl t3;

      CREATE TABLE TRAFODION.SCH.T3
      (
      YEAR INT NO DEFAULT NOT NULL NOT DROPPABLE NOT
      SERIALIZED
      , PRIMARY KEY (YEAR ASC)
      )
      ATTRIBUTES ALIGNED FORMAT
      ;

      – GRANT SELECT, INSERT, DELETE, UPDATE, REFERENCES ON TRAFODION.SCH.T3 TO DB__ROOT WITH GRANT OPTION;

      — SQL operation complete.
      >>create table t4 like t3;

          • ERROR[15001] A syntax error occurred at or before:
            create table TRAFODION.SCH.T4 ( "YEAR" INT NO
            DEFAULT NOT NULL NOT DROPPABLE NOT
            SERIALIZED , PRIMARY KEY (YEAR ASC) ) ATTRIBUTES ALIGNED FORMAT;
            ^ (151 characters from start of SQL statement)
          • ERROR[8822] The statement was not prepared.

      — SQL operation failed with errors.
      >>showddl t4;

          • ERROR[4082] Object TRAFODION.SCH.T4 does not exist or is inaccessible.
          • ERROR[8822] The statement was not prepared.

      >>
      >>drop table if exists t1;

      — SQL operation complete.
      >>drop table if exists t2;

      — SQL operation complete.
      >>drop table if exists t3;

      — SQL operation complete.
      >>drop table if exists t4;

      — SQL operation complete.
      >>
      >>
      >>?section rangesplitby
      >>
      >>-- create table range split by fails when column name is a reserved word
      >>
      >>create table mytable (c1 int not null, "YEAR" int not null, primary key (c1, "YEAR")) range split by (c1, "YEAR") (add first key (1, 1));

          • ERROR[15001] A syntax error occurred at or before:
            create table mytable (c1 int not null, "YEAR" int not null, primary key (c1, "Y
            EAR")) range split by (c1, "YEAR") (add first key (1, 1));
            ^ (97 characters from start of SQL statement)
          • ERROR[8822] The statement was not prepared.

      >>
      >>
      >>?section constraintname
      >>
      >>-- using a reserved word as a constraint name fails
      >>
      >>drop table if exists mytable1;

      — SQL operation complete.
      >>drop table if exists mytable2;

      — SQL operation complete.
      >>
      >>create table mytable1 (c1 int constraint "DATE" unique);

          • ERROR[4082] Object TRAFODION.SCH.MYTABLE1 does not exist or is inaccessible.
          • ERROR[1029] Object TRAFODION.SCH.DATE could not be created.
          • ERROR[1029] Object TRAFODION.SCH.MYTABLE1 could not be created.

      — SQL operation failed with errors.
      >>alter table mytable1 drop constraint "DATE";

          • ERROR[1127] The specified table TRAFODION.SCH.MYTABLE1 does not exist, is inaccessible or is not a base table. Please verify that the correct table was specified.

      — SQL operation failed with errors.
      >>
      >>create table mytable2 (c1 int, constraint "TIME" unique(c1));

          • ERROR[4082] Object TRAFODION.SCH.MYTABLE2 does not exist or is inaccessible.
          • ERROR[1029] Object TRAFODION.SCH.TIME could not be created.
          • ERROR[1029] Object TRAFODION.SCH.MYTABLE2 could not be created.

      — SQL operation failed with errors.
      >>alter table mytable2 drop constraint "TIME";

          • ERROR[1127] The specified table TRAFODION.SCH.MYTABLE2 does not exist, is inaccessible or is not a base table. Please verify that the correct table was specified.

      — SQL operation failed with errors.
      >>
      >>drop table if exists mytable1;

      — SQL operation complete.
      >>drop table if exists mytable2;

      — SQL operation complete.
      >>
      >>
      >>
      >>
      >>exit;

      End of MXCI Session

      Attachments

        1. jira.sql.txt
          2 kB
          Dave Birdsall

        Issue Links

          Activity

            People

              dbirdsall Dave Birdsall
              dbirdsall Dave Birdsall
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: