Hi,

I notice that in our reserved words list (parser/ParKeyWords.cpp), we have such 
tokens as SQL_CHAR, SQL_DECIMAL, and so on listed as reserved words.

They are marked in the reserved word table with the symbol, "COMPAQ_". Early in 
the module, that symbol is defined with these comments:

// ANSI SQL 99 reserved words added as COMPAQ_ reserved words if they were
// not already present in the table below.  Unreserved words were not
// considered.  Words already present, if not reserved, remain unreserved.
// No potentially reserved words in SQL 99.  None were added as compound
// key words.

I just took a look at the ANSI SQL 1999 standard, and SQL_CHAR, SQL_DECIMAL 
etc. are *not* reserved words in the standard. For reference, here's the list, 
taken from section 5.2 <token> and <separator> in ISO/IEC 9075-2:1999:

<reserved word> ::=
ABSOLUTE | ACTION | ADD | ADMIN | AFTER | AGGREGATE
| ALIAS | ALL | ALLOCATE | ALTER | AND | ANY | ARE | ARRAY | AS | ASC
| ASSERTION | AT | AUTHORIZATION
| BEFORE | BEGIN | BINARY | BIT | BLOB | BOOLEAN | BOTH | BREADTH | BY
| CALL | CASCADE | CASCADED | CASE | CAST | CATALOG | CHAR | CHARACTER
| CHECK | CLASS | CLOB | CLOSE | COLLATE | COLLATION | COLUMN | COMMIT
| COMPLETION | CONNECT | CONNECTION | CONSTRAINT | CONSTRAINTS
| CONSTRUCTOR | CONTINUE | CORRESPONDING | CREATE | CROSS | CUBE | CURRENT
| CURRENT_DATE | CURRENT_PATH | CURRENT_ROLE | CURRENT_TIME | CURRENT_TIMESTAMP
| CURRENT_USER | CURSOR | CYCLE
| DATA | DATE | DAY | DEALLOCATE | DEC | DECIMAL | DECLARE | DEFAULT
| DEFERRABLE | DEFERRED | DELETE | DEPTH | DEREF | DESC | DESCRIBE | DESCRIPTOR
| DESTROY | DESTRUCTOR | DETERMINISTIC | DICTIONARY | DIAGNOSTICS | DISCONNECT
| DISTINCT | DOMAIN | DOUBLE | DROP | DYNAMIC
| EACH | ELSE | END | END-EXEC | EQUALS | ESCAPE | EVERY | EXCEPT
| EXCEPTION | EXEC | EXECUTE | EXTERNAL
| FALSE | FETCH | FIRST | FLOAT | FOR | FOREIGN | FOUND | FROM | FREE | FULL
| FUNCTION
| GENERAL | GET | GLOBAL | GO | GOTO | GRANT | GROUP | GROUPING
| HAVING | HOST | HOUR
| IDENTITY | IGNORE | IMMEDIATE | IN | INDICATOR | INITIALIZE | INITIALLY
| INNER | INOUT | INPUT | INSERT | INT | INTEGER | INTERSECT | INTERVAL
| INTO | IS | ISOLATION | ITERATE
| JOIN
| KEY
| LANGUAGE | LARGE | LAST | LATERAL | LEADING | LEFT | LESS | LEVEL | LIKE
| LIMIT
| LOCAL | LOCALTIME | LOCALTIMESTAMP | LOCATOR
| MAP | MATCH | MINUTE | MODIFIES | MODIFY | MODULE | MONTH
| NAMES | NATIONAL | NATURAL | NCHAR | NCLOB | NEW | NEXT | NO | NONE
| NOT | NULL | NUMERIC
| OBJECT | OF | OFF | OLD | ON | ONLY | OPEN | OPERATION | OPTION
| OR | ORDER | ORDINALITY | OUT | OUTER | OUTPUT
| PAD | PARAMETER | PARAMETERS | PARTIAL | PATH | POSTFIX | PRECISION | PREFIX
| PREORDER | PREPARE | PRESERVE | PRIMARY
| PRIOR | PRIVILEGES | PROCEDURE | PUBLIC
| READ | READS | REAL | RECURSIVE | REF | REFERENCES | REFERENCING | RELATIVE
| RESTRICT | RESULT | RETURN | RETURNS | REVOKE | RIGHT
| ROLE | ROLLBACK | ROLLUP | ROUTINE | ROW | ROWS
| SAVEPOINT | SCHEMA | SCROLL | SCOPE | SEARCH | SECOND | SECTION | SELECT
| SEQUENCE | SESSION | SESSION_USER | SET | SETS | SIZE | SMALLINT | SOME| SPACE
| SPECIFIC | SPECIFICTYPE | SQL | SQLEXCEPTION | SQLSTATE | SQLWARNING | START
| STATE | STATEMENT | STATIC | STRUCTURE | SYSTEM_USER
| TABLE | TEMPORARY | TERMINATE | THAN | THEN | TIME | TIMESTAMP
| TIMEZONE_HOUR | TIMEZONE_MINUTE | TO | TRAILING | TRANSACTION | TRANSLATION
| TREAT | TRIGGER | TRUE
| UNDER | UNION | UNIQUE | UNKNOWN
| UNNEST | UPDATE | USAGE | USER | USING
| VALUE | VALUES | VARCHAR | VARIABLE | VARYING | VIEW
| WHEN | WHENEVER | WHERE | WITH | WITHOUT | WORK | WRITE
| YEAR
| ZONE

Yet, our inclusion seems intentional. I notice that regression test 
core/TEST037, for example, explicitly tests for these words to insure they are 
reserved.

Now, these symbols are defined in the CLI bindings section of the standard, in 
Appendix A.1 "C header file SQLCLI.H" of ISO/IEC 9075-3:1999. But those are C 
symbols, not SQL symbols.

Does anyone know or remember why we chose to reserve these keywords in 
Trafodion's predecessor product?

Thanks,

Dave

Reply via email to