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