Hi,

Trafodion today has three places where it defines whether a word is a reserved 
word or a non-reserved word.

In parser/ParKeyWords.cpp, there is a table of identifiers. Each identifier has 
a token code associated with it. If the token code is not IDENTIFIER, it may be 
a reserved or non-reserved word. There are flags, RESWORD_, NONRESWORD_ and 
NONRESTOKEN_ associated with each identifier in the table, however logic never 
looks at these flags; they are for documentation purposes only. (Exception: 
There is legacy code that looks at them if we are in an "MP" context. That 
refers to one of Trafodion's predecessor products. That code is never entered 
in Trafodion.)

The real work happens in parser/sqlparser.y. If a word's token has a token code 
other than IDENTIFIER, then there are a set of productions that determine 
whether it is reserved or not. If it is in the nonreserved_word production, 
then it is a non-reserved word. So apart from those contexts where the word has 
a special meaning, it can be used as an ordinary identifier. Similarly, 
nonreserved_func_word lists tokens that are acceptable as function names. Each 
of these productions allows a word to be an ordinary identifier in particular 
contexts. If a word's token is not in any of these productions, then it is 
truly a reserved word.

There is another module, common/ComResWords.cpp, that seems to duplicate the 
table in parser/ParKeyWords.cpp, but it is quite out-of-date. It's also never 
called. It looks like in the past it was used by the ToInternalIdentifier 
function in common/NAString.cpp to return an error if one tried to use a 
reserved word as an external-format identifier. But that logic has been 
changed; ToInternalIdentifier now calls a stub function that always returns 
FALSE when checking for reserved words.

I'd like to simplify this logic, as it is causing problems for folks who are 
adding new non-reserved words to Trafodion.

I'd like to delete common/ComResWords.cpp entirely. It's unused, obsolete and 
redundant. If we decide we need ToInternalIdentifier to check for reserved 
words, we can have it use the table in parser/ParKeyWords.cpp instead.

I'd also like to remove the obsolete "MP context" code in 
parser/ParKeyWords.cpp (and possibly other places in the parser).

Does anyone object to my doing this? If I hear no objections by Monday, July 8, 
I'll file a JIRA and commence work.

Thanks,

Dave

Reply via email to