001package gudusoft.gsqlparser.sqlcmds;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.stmt.*;
005import gudusoft.gsqlparser.stmt.teradata.*;
006import gudusoft.gsqlparser.stmt.mssql.*;
007
008/**
009 * Teradata SQL command resolver.
010 * Handles Teradata-specific statement detection and command resolution.
011 *
012 * @since 3.1.0.9
013 */
014public class TSqlCmdsTeradata extends AbstractSqlCmds {
015
016    public TSqlCmdsTeradata() {
017        super(EDbVendor.dbvteradata);
018    }
019
020    @Override
021    protected void initializeCommands() {
022        // Teradata commands - sorted alphabetically by first token
023        // Note: Longer patterns should come before shorter ones with same prefix
024
025        addCmd(TBaseType.rrw_abort,  " "," "," "," "," "," ", ESqlStatementType.sstteradataabort);
026        addCmd(TBaseType.rrw_alter,"constraint"," "," "," "," "," ", ESqlStatementType.sstteradataalterconstraint);
027        addCmd(TBaseType.rrw_alter,"function"," "," "," "," "," ", ESqlStatementType.sstteradataalterfunction);
028        addCmd(TBaseType.rrw_alter,"specific","function"," "," "," "," ", ESqlStatementType.sstteradataalterfunction);
029        addCmd(TBaseType.rrw_alter,"method"," "," "," "," "," ", ESqlStatementType.sstteradataaltermethod);
030        addCmd(TBaseType.rrw_alter,"constructor","method"," "," "," "," ", ESqlStatementType.sstteradataaltermethod);
031        addCmd(TBaseType.rrw_alter,"instance","method"," "," "," "," ", ESqlStatementType.sstteradataaltermethod);
032        addCmd(TBaseType.rrw_alter,"specific","method"," "," "," "," ", ESqlStatementType.sstteradataaltermethod);
033        addCmd(TBaseType.rrw_alter,"procedure"," "," "," "," "," ", ESqlStatementType.sstteradataalterprocedure);
034        addCmd(TBaseType.rrw_alter,"replication","group"," "," "," "," ", ESqlStatementType.sstteradataalterreplicationgroup);
035        addCmd(TBaseType.rrw_alter,"table"," "," "," "," "," ", ESqlStatementType.sstteradataaltertable);
036        addCmd(TBaseType.rrw_alter,"trigger"," "," "," "," "," ", ESqlStatementType.sstteradataaltertrigger);
037        addCmd(TBaseType.rrw_alter,"type"," "," "," "," "," ", ESqlStatementType.sstteradataaltertype);
038        addCmd(TBaseType.rrw_alter,"zone"," "," "," "," "," ", ESqlStatementType.sstteradataalterzone);
039        addCmd(TBaseType.rrw_begin,"delcare","section"," "," "," "," ", ESqlStatementType.sstteradatabegindeclaresection);
040        addCmd(TBaseType.rrw_begin,"logging"," "," "," "," "," ", ESqlStatementType.sstteradatabeginlogging);
041        addCmd(TBaseType.rrw_begin,"query","logging"," "," "," "," ", ESqlStatementType.sstteradatabeginquerylogging);
042        addCmd(TBaseType.rrw_begin,"transaction"," "," "," "," "," ", ESqlStatementType.sstteradatabegintransaction);
043        addCmd(TBaseType.rrw_begin,"request"," "," "," "," "," ", ESqlStatementType.sstteradatabeginrequest);
044        addCmd(TBaseType.rrw_bt," "," "," "," "," "," ", ESqlStatementType.sstteradatabegintransaction);
045        addCmd(TBaseType.rrw_call," "," "," "," "," "," ", ESqlStatementType.sstteradatacall);
046        addCmd(TBaseType.rrw_check,"workload"," "," "," "," "," ", ESqlStatementType.sstteradatacheckworkload);
047        addCmd(TBaseType.rrw_checkpoint," "," "," "," "," "," ", ESqlStatementType.sstteradatacheckpoint);
048        addCmd(TBaseType.rrw_close," "," "," "," "," "," ", ESqlStatementType.sstteradataclose);
049        addCmd(TBaseType.rrw_teradata_cm," "," "," "," "," "," ", ESqlStatementType.sstteradatacreatemacro);
050        addCmd(TBaseType.rrw_teradata_collect,"demographics"," "," "," "," "," ", ESqlStatementType.sstteradatacollectdemographics);
051        addCmd(TBaseType.rrw_teradata_collect,"statistics"," "," "," "," "," ", ESqlStatementType.sstteradatacollectstatistics);
052        addCmd(TBaseType.rrw_teradata_collect,"stats"," "," "," "," "," ", ESqlStatementType.sstteradatacollectstatistics);
053        addCmd(TBaseType.rrw_teradata_collect,"stat"," "," "," "," "," ", ESqlStatementType.sstteradatacollectstatistics);
054        addCmd(TBaseType.rrw_teradata_collect,"summary","statistics"," "," "," "," ", ESqlStatementType.sstteradatacollectstatistics);
055        addCmd(TBaseType.rrw_teradata_collect,"summary","stats"," "," "," "," ", ESqlStatementType.sstteradatacollectstatistics);
056        addCmd(TBaseType.rrw_teradata_collect,"summary","stat"," "," "," "," ", ESqlStatementType.sstteradatacollectstatistics);
057        addCmd(TBaseType.rrw_comment," "," "," "," "," "," ", ESqlStatementType.sstteradatacomment);
058        addCmd(TBaseType.rrw_commit," "," "," "," "," "," ", ESqlStatementType.sstteradatacommit);
059        addCmd(TBaseType.rrw_connect," "," "," "," "," "," ", ESqlStatementType.sstteradataconnect);
060        addCmd(TBaseType.rrw_create,"authorization"," "," "," "," "," ", ESqlStatementType.sstteradatacreateauthorization);
061        addCmd(TBaseType.rrw_create,"cast"," "," "," "," "," ", ESqlStatementType.sstteradatacreatecast);
062        addCmd(TBaseType.rrw_create,"constraint"," "," "," "," "," ", ESqlStatementType.sstteradatacreateconstraint);
063        addCmd(TBaseType.rrw_create,"glop"," "," "," "," "," ", ESqlStatementType.sstteradatacreateglop);
064        addCmd(TBaseType.rrw_create,"constructor","method"," "," "," "," ", ESqlStatementType.sstteradatacreatemethod);
065        addCmd(TBaseType.rrw_create,"database"," "," "," "," "," ", ESqlStatementType.sstteradatacreatedatabase);
066        addCmd(TBaseType.rrw_create,"error","table"," "," "," "," ", ESqlStatementType.sstcreatetable);
067        addCmd(TBaseType.rrw_create,"external","role"," "," "," "," ", ESqlStatementType.sstteradatacreaterole);
068        addCmd(TBaseType.rrw_create,"foreign","table"," "," "," "," ", ESqlStatementType.sstcreatetable);
069        addCmd(TBaseType.rrw_create,"or","replace","function"," "," "," ", ESqlStatementType.sstteradatacreatefunction);
070        addCmd(TBaseType.rrw_create,"function"," "," "," "," "," ", ESqlStatementType.sstteradatacreatefunction);
071        addCmd(TBaseType.rrw_create,"global","temporary","multiset","table"," "," ", ESqlStatementType.sstcreatetable);
072        addCmd(TBaseType.rrw_create,"global","temporary","set","table"," "," ", ESqlStatementType.sstcreatetable);
073        addCmd(TBaseType.rrw_create,"global","temporary","table"," "," "," ", ESqlStatementType.sstcreatetable);
074        addCmd(TBaseType.rrw_create,"hash","index"," "," "," "," ", ESqlStatementType.sstcreateindex);
075        addCmd(TBaseType.rrw_create,"index"," "," "," "," "," ", ESqlStatementType.sstcreateindex);
076        addCmd(TBaseType.rrw_create,"instance","method"," "," "," "," ", ESqlStatementType.sstteradatacreatemethod);
077        addCmd(TBaseType.rrw_create,"join","index"," "," "," "," ", ESqlStatementType.sstcreateindex);
078        addCmd(TBaseType.rrw_create,"or","replace","macro"," "," "," ", ESqlStatementType.sstteradatacreatemacro);
079        addCmd(TBaseType.rrw_create,"macro"," "," "," "," "," ", ESqlStatementType.sstteradatacreatemacro);
080        addCmd(TBaseType.rrw_create,"method"," "," "," "," "," ", ESqlStatementType.sstteradatacreatemethod);
081        addCmd(TBaseType.rrw_create,"multiset","global","temporary","table"," "," ", ESqlStatementType.sstcreatetable);
082        addCmd(TBaseType.rrw_create,"multiset","foreign","table"," "," "," ", ESqlStatementType.sstcreatetable);
083        addCmd(TBaseType.rrw_create,"multiset","table"," "," "," "," ", ESqlStatementType.sstcreatetable);
084        addCmd(TBaseType.rrw_create,"multiset","volatile","table"," "," "," ", ESqlStatementType.sstcreatetable);
085        addCmd(TBaseType.rrw_create,"ordering"," "," "," "," "," ", ESqlStatementType.sstteradatacreateordering);
086        addCmd(TBaseType.rrw_create,"or","replace","proc"," "," "," ", ESqlStatementType.sstcreateprocedure);
087        addCmd(TBaseType.rrw_create,"or","replace","procedure"," "," "," ", ESqlStatementType.sstcreateprocedure);
088        addCmd(TBaseType.rrw_create,"proc"," "," "," "," "," ", ESqlStatementType.sstcreateprocedure);
089        addCmd(TBaseType.rrw_create,"procedure"," "," "," "," "," ", ESqlStatementType.sstcreateprocedure);
090        addCmd(TBaseType.rrw_create,"profile"," "," "," "," "," ", ESqlStatementType.sstteradatacreateprofile);
091        addCmd(TBaseType.rrw_create,"or","replace","recursive","view"," "," ", ESqlStatementType.sstcreateview);
092        addCmd(TBaseType.rrw_create,"or","replace","view"," "," "," ", ESqlStatementType.sstcreateview);
093        addCmd(TBaseType.rrw_create,"recursive","view"," "," "," "," ", ESqlStatementType.sstcreateview);
094        addCmd(TBaseType.rrw_create,"replication","group"," "," "," "," ", ESqlStatementType.sstteradatacreatereplicationgroup);
095        addCmd(TBaseType.rrw_create,"role"," "," "," "," "," ", ESqlStatementType.sstteradatacreaterole);
096        addCmd(TBaseType.rrw_create,"set","global","temporary","table"," "," ", ESqlStatementType.sstcreatetable);
097        addCmd(TBaseType.rrw_create,"set","foreign","table"," "," "," ", ESqlStatementType.sstcreatetable);
098        addCmd(TBaseType.rrw_create,"set","table"," "," "," "," ", ESqlStatementType.sstcreatetable);
099        addCmd(TBaseType.rrw_create,"set","volatile","table"," "," "," ", ESqlStatementType.sstcreatetable);
100        addCmd(TBaseType.rrw_create,"table"," "," "," "," "," ", ESqlStatementType.sstcreatetable);
101        addCmd(TBaseType.rrw_create,"temporary","table"," "," "," "," ", ESqlStatementType.sstcreatetable);
102        addCmd(TBaseType.rrw_create,"transform"," "," "," "," "," ", ESqlStatementType.sstteradatacreatetransform);
103        addCmd(TBaseType.rrw_create,"or","replace","trigger"," "," "," ", ESqlStatementType.sstteradatacreatetrigger);
104        addCmd(TBaseType.rrw_create,"trigger"," "," "," "," "," ", ESqlStatementType.sstteradatacreatetrigger);
105        addCmd(TBaseType.rrw_create,"type"," "," "," "," "," ", ESqlStatementType.sstteradatacreatetype);
106        addCmd(TBaseType.rrw_create,"unique","index"," "," "," "," ", ESqlStatementType.sstcreateindex);
107        addCmd(TBaseType.rrw_create,"user"," "," "," "," "," ", ESqlStatementType.sstteradatacreateuser);
108        addCmd(TBaseType.rrw_create,"view"," "," "," "," "," ", ESqlStatementType.sstcreateview);
109        addCmd(TBaseType.rrw_create,"volatile","multiset","table"," "," "," ", ESqlStatementType.sstcreatetable);
110        addCmd(TBaseType.rrw_create,"volatile","table"," "," "," "," ", ESqlStatementType.sstcreatetable);
111        addCmd(TBaseType.rrw_create,"volatile","set","table"," "," "," ", ESqlStatementType.sstcreatetable);
112        addCmd(TBaseType.rrw_create,"zone"," "," "," "," "," ", ESqlStatementType.sstcreatezone);
113        addCmd(TBaseType.rrw_ct," "," "," "," "," "," ", ESqlStatementType.sstcreatetable);
114        addCmd(TBaseType.rrw_teradata_cv," "," "," "," "," "," ", ESqlStatementType.sstcreateview);
115        addCmd(TBaseType.rrw_database," "," "," "," "," "," ", ESqlStatementType.sstteradatadatabase);
116        addCmd(TBaseType.rrw_declare,"cursor"," "," "," "," "," ", ESqlStatementType.sstteradatadeclarecursor);
117        addCmd(TBaseType.rrw_declare,"*","cursor"," "," "," "," ", ESqlStatementType.sstteradatadeclarecursor);
118        addCmd(TBaseType.rrw_declare,"statement"," "," "," "," "," ", ESqlStatementType.sstteradatadeclarestatement);
119        addCmd(TBaseType.rrw_declare,"table"," "," "," "," "," ", ESqlStatementType.sstteradatadeclaretable);
120        addCmd(TBaseType.rrw_teradata_del," "," "," "," "," "," ", ESqlStatementType.sstdelete);
121        addCmd(TBaseType.rrw_delete," "," "," "," "," "," ", ESqlStatementType.sstdelete);
122        addCmd(TBaseType.rrw_delete,"database"," "," "," "," "," ", ESqlStatementType.sstteradatadeletedatabase);
123        addCmd(TBaseType.rrw_delete,"user"," "," "," "," "," ", ESqlStatementType.sstteradatadeleteuser);
124        addCmd(TBaseType.rrw_describe," "," "," "," "," "," ", ESqlStatementType.sstteradatadescribe);
125        addCmd(TBaseType.rrw_teradata_diagnostic," "," "," "," "," "," ", ESqlStatementType.sstteradatadiagnostic);
126        addCmd(TBaseType.rrw_drop,"authorization"," "," "," "," "," ", ESqlStatementType.sstteradatadropauthorization);
127        addCmd(TBaseType.rrw_drop,"cast"," "," "," "," "," ", ESqlStatementType.sstteradatadropcast);
128        addCmd(TBaseType.rrw_drop,"constraint"," "," "," "," "," ", ESqlStatementType.sstteradatadropconstraint);
129        addCmd(TBaseType.rrw_drop,"database"," "," "," "," "," ", ESqlStatementType.sstteradatadropdatabase);
130        addCmd(TBaseType.rrw_drop,"error","table"," "," "," "," ", ESqlStatementType.sstdroptable);
131        addCmd(TBaseType.rrw_drop,"external","role"," "," "," "," ", ESqlStatementType.sstteradatadroprole);
132        addCmd(TBaseType.rrw_drop,"function"," "," "," "," "," ", ESqlStatementType.sstteradatadropfunction);
133        addCmd(TBaseType.rrw_drop,"hash","index"," "," "," "," ", ESqlStatementType.sstdropindex);
134        addCmd(TBaseType.rrw_drop,"index"," "," "," "," "," ", ESqlStatementType.sstdropindex);
135        addCmd(TBaseType.rrw_drop,"join","index"," "," "," "," ", ESqlStatementType.sstdropindex);
136        addCmd(TBaseType.rrw_drop,"macro"," "," "," "," "," ", ESqlStatementType.sstteradatadropmacro);
137        addCmd(TBaseType.rrw_drop,"ordering"," "," "," "," "," ", ESqlStatementType.sstteradatadropordering);
138        addCmd(TBaseType.rrw_drop,"procedure"," "," "," "," "," ", ESqlStatementType.sstteradatadropprocedure);
139        addCmd(TBaseType.rrw_drop,"profile"," "," "," "," "," ", ESqlStatementType.sstteradatadropprofile);
140        addCmd(TBaseType.rrw_drop,"replication","group"," "," "," "," ", ESqlStatementType.sstteradatadropreplicationgroup);
141        addCmd(TBaseType.rrw_drop,"role"," "," "," "," "," ", ESqlStatementType.sstteradatadroprole);
142        addCmd(TBaseType.rrw_drop,"specific","function"," "," "," "," ", ESqlStatementType.sstteradatadropfunction);
143        addCmd(TBaseType.rrw_drop,"stat"," "," "," "," "," ", ESqlStatementType.sstteradatadropstatistics);
144        addCmd(TBaseType.rrw_drop,"statistics"," "," "," "," "," ", ESqlStatementType.sstteradatadropstatistics);
145        addCmd(TBaseType.rrw_drop,"stats"," "," "," "," "," ", ESqlStatementType.sstteradatadropstatistics);
146        addCmd(TBaseType.rrw_drop,"table"," "," "," "," "," ", ESqlStatementType.sstdroptable);
147        addCmd(TBaseType.rrw_drop,"temporary","table"," "," "," "," ", ESqlStatementType.sstdroptable);
148        addCmd(TBaseType.rrw_drop,"transform"," "," "," "," "," ", ESqlStatementType.sstteradatadroptransform);
149        addCmd(TBaseType.rrw_drop,"trigger"," "," "," "," "," ", ESqlStatementType.sstteradatadroptrigger);
150        addCmd(TBaseType.rrw_drop,"type"," "," "," "," "," ", ESqlStatementType.sstteradatadroptype);
151        addCmd(TBaseType.rrw_drop,"unique","index"," "," "," "," ", ESqlStatementType.sstdropindex);
152        addCmd(TBaseType.rrw_drop,"user"," "," "," "," "," ", ESqlStatementType.sstteradatadropuser);
153        addCmd(TBaseType.rrw_drop,"view"," "," "," "," "," ", ESqlStatementType.sstdropview);
154        addCmd(TBaseType.rrw_drop,"zone"," "," "," "," "," ", ESqlStatementType.sstteradatadropzone);
155        addCmd(TBaseType.rrw_teradata_dump,"explain"," "," "," "," "," ", ESqlStatementType.sstteradatadumpexplain);
156        addCmd(TBaseType.rrw_teradata_echo," "," "," "," "," "," ", ESqlStatementType.sstteradataecho);
157        addCmd(TBaseType.rrw_end,"declare","section"," "," "," "," ", ESqlStatementType.sstteradataenddeclaresection);
158        addCmd(TBaseType.rrw_end,"logging"," "," "," "," "," ", ESqlStatementType.sstteradataendlogging);
159        addCmd(TBaseType.rrw_end,"query","logging"," "," "," "," ", ESqlStatementType.sstteradataendquerylogging);
160        addCmd(TBaseType.rrw_end,"transaction"," "," "," "," "," ", ESqlStatementType.sstteradataendtransaction);
161        addCmd(TBaseType.rrw_end,"request"," "," "," "," "," ", ESqlStatementType.sstteradataendrequest);
162        addCmd(TBaseType.rrw_et," "," "," "," "," "," ", ESqlStatementType.sstteradataendtransaction);
163        addCmd(TBaseType.rrw_execute," "," "," "," "," "," ", ESqlStatementType.sstteradataexecute);
164        addCmd(TBaseType.rrw_exec," "," "," "," "," "," ", ESqlStatementType.sstteradataexecute);
165        addCmd(TBaseType.rrw_execute,"immediate"," "," "," "," "," ", ESqlStatementType.sstteradataexecuteimmediate);
166        addCmd(TBaseType.rrw_teradata_exit," "," "," "," "," "," ", ESqlStatementType.sstteradataExit);
167        addCmd(TBaseType.rrw_explain, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstExplain);
168        addCmd(TBaseType.rrw_fetch," "," "," "," "," "," ", ESqlStatementType.sstteradatafetch);
169        addCmd(TBaseType.rrw_get,"crash"," "," "," "," "," ", ESqlStatementType.sstteradatagetcrash);
170        addCmd(TBaseType.rrw_get,"diagnostics"," "," "," "," "," ", ESqlStatementType.sstgetdiagnostics);
171        addCmd(TBaseType.rrw_teradata_give," "," "," "," "," "," ", ESqlStatementType.sstteradatagive);
172        addCmd(TBaseType.rrw_grant," "," "," "," "," "," ", ESqlStatementType.sstteradatagrant);
173        addCmd(TBaseType.rrw_teradata_help," "," "," "," "," "," ", ESqlStatementType.sstteradatahelp);
174        addCmd(TBaseType.rrw_include," "," "," "," "," "," ", ESqlStatementType.sstteradatainclude);
175        addCmd(TBaseType.rrw_teradata_ins," "," "," "," "," "," ", ESqlStatementType.sstinsert);
176        addCmd(TBaseType.rrw_insert," "," "," "," "," "," ", ESqlStatementType.sstinsert);
177        addCmd(TBaseType.rrw_insert,"explain"," "," "," "," "," ", ESqlStatementType.sstteradatainsertexplain);
178        addCmd(TBaseType.rrw_teradata_label," "," "," "," "," "," ", ESqlStatementType.sstteradatalabel);
179        addCmd(TBaseType.rrw_lock," "," "," "," "," "," ", ESqlStatementType.sstteradatalock);
180        addCmd(TBaseType.rrw_teradata_locking," "," "," "," "," "," ", ESqlStatementType.sstteradatalock);
181        addCmd(TBaseType.rrw_teradata_logon," "," "," "," "," "," ", ESqlStatementType.sstteradatalogon);
182        addCmd(TBaseType.rrw_merge," "," "," "," "," "," ", ESqlStatementType.sstmerge);
183        addCmd(TBaseType.rrw_teradata_modify,"database"," "," "," "," "," ", ESqlStatementType.sstteradatamodifydatabase);
184        addCmd(TBaseType.rrw_teradata_modify,"profile"," "," "," "," "," ", ESqlStatementType.sstteradatamodifyprofile);
185        addCmd(TBaseType.rrw_teradata_modify,"user"," "," "," "," "," ", ESqlStatementType.sstteradatamodifyuser);
186        addCmd(TBaseType.rrw_open," "," "," "," "," "," ", ESqlStatementType.sstteradataopen);
187        addCmd(TBaseType.rrw_teradata_position," "," "," "," "," "," ", ESqlStatementType.sstteradataposition);
188        addCmd(TBaseType.rrw_prepare," "," "," "," "," "," ", ESqlStatementType.sstteradataprepare);
189        addCmd(TBaseType.rrw_release,"lock"," "," "," "," "," ", ESqlStatementType.sstteradatareleaseLock);
190        addCmd(TBaseType.rrw_rename,"function"," "," "," "," "," ", ESqlStatementType.sstteradatarenamefunction);
191        addCmd(TBaseType.rrw_rename,"macro"," "," "," "," "," ", ESqlStatementType.sstteradatarenamemacro);
192        addCmd(TBaseType.rrw_rename,"procedure"," "," "," "," "," ", ESqlStatementType.sstteradatarenameprocedure);
193        addCmd(TBaseType.rrw_rename,"table"," "," "," "," "," ", ESqlStatementType.sstteradatarenametable);
194        addCmd(TBaseType.rrw_rename,"trigger"," "," "," "," "," ", ESqlStatementType.sstteradatarenametrigger);
195        addCmd(TBaseType.rrw_rename,"view"," "," "," "," "," ", ESqlStatementType.sstteradatarenameview);
196        addCmd(TBaseType.rrw_replace,"cast"," "," "," "," "," ", ESqlStatementType.sstteradatareplacecast);
197        addCmd(TBaseType.rrw_replace,"constructor","method"," "," "," "," ", ESqlStatementType.sstteradatareplacemethod);
198        addCmd(TBaseType.rrw_replace,"function"," "," "," "," "," ", ESqlStatementType.sstteradatareplacefunction);
199        addCmd(TBaseType.rrw_replace,"instance","method"," "," "," "," ", ESqlStatementType.sstteradatareplacemethod);
200        addCmd(TBaseType.rrw_replace,"macro"," "," "," "," "," ", ESqlStatementType.sstteradatareplacemacro);
201        addCmd(TBaseType.rrw_replace,"method"," "," "," "," "," ", ESqlStatementType.sstteradatareplacemethod);
202        addCmd(TBaseType.rrw_replace,"ordering"," "," "," "," "," ", ESqlStatementType.sstteradatareplaceordering);
203        addCmd(TBaseType.rrw_replace,"procedure"," "," "," "," "," ", ESqlStatementType.sstteradatareplaceprocedure);
204        addCmd(TBaseType.rrw_replace,"specific","method"," "," "," "," ", ESqlStatementType.sstteradatareplacemethod);
205        addCmd(TBaseType.rrw_replace,"transform"," "," "," "," "," ", ESqlStatementType.sstteradatareplacetransform);
206        addCmd(TBaseType.rrw_replace,"trigger"," "," "," "," "," ", ESqlStatementType.sstteradatacreatetrigger);
207        addCmd(TBaseType.rrw_replace,"view"," "," "," "," "," ", ESqlStatementType.sstteradatareplaceview);
208        addCmd(TBaseType.rrw_replace,"recursive","view"," "," "," "," ", ESqlStatementType.sstteradatareplaceview);
209        addCmd(TBaseType.rrw_teradata_restart,"index","analysis"," "," "," "," ", ESqlStatementType.sstteradatarestartindexanalysis);
210        addCmd(TBaseType.rrw_revoke," "," "," "," "," "," ", ESqlStatementType.sstteradatarevoke);
211        addCmd(TBaseType.rrw_rollback," "," "," "," "," "," ", ESqlStatementType.sstteradatarollback);
212        addCmd(TBaseType.rrw_teradata_sel," "," "," "," "," "," ", ESqlStatementType.sstselect);
213        addCmd(TBaseType.rrw_select," "," "," "," "," "," ", ESqlStatementType.sstselect);
214        addCmd(TBaseType.rrw_set,"role"," "," "," "," "," ", ESqlStatementType.sstteradatasetrole);
215        addCmd(TBaseType.rrw_set,"session"," "," "," "," "," ", ESqlStatementType.sstteradatasetsession);
216        addCmd(TBaseType.rrw_ss," "," "," "," "," "," ", ESqlStatementType.sstteradatasetsession);
217        addCmd(TBaseType.rrw_set,"time","zone"," "," "," "," ", ESqlStatementType.sstteradatasettimezone);
218        addCmd(TBaseType.rrw_show," "," "," "," "," "," ", ESqlStatementType.sstteradatashow);
219        addCmd(TBaseType.rrw_show,"constructor","method"," "," "," "," ", ESqlStatementType.sstteradatashowmethod);
220        addCmd(TBaseType.rrw_show,"function"," "," "," "," "," ", ESqlStatementType.sstteradatashowfunction);
221        addCmd(TBaseType.rrw_show,"hash","index"," "," "," "," ", ESqlStatementType.sstteradatashowindex);
222        addCmd(TBaseType.rrw_show,"instance","method"," "," "," "," ", ESqlStatementType.sstteradatashowmethod);
223        addCmd(TBaseType.rrw_show,"join","index"," "," "," "," ", ESqlStatementType.sstteradatashowindex);
224        addCmd(TBaseType.rrw_show,"macro"," "," "," "," "," ", ESqlStatementType.sstteradatashowmacro);
225        addCmd(TBaseType.rrw_show,"method"," "," "," "," "," ", ESqlStatementType.sstteradatashowmethod);
226        addCmd(TBaseType.rrw_show,"procedure"," "," "," "," "," ", ESqlStatementType.sstteradatashowprocedure);
227        addCmd(TBaseType.rrw_show,"replication","group"," "," "," "," ", ESqlStatementType.sstteradatashowreplicationgroup);
228        addCmd(TBaseType.rrw_show,"specific","function"," "," "," "," ", ESqlStatementType.sstteradatashowfunction);
229        addCmd(TBaseType.rrw_show,"specific","method"," "," "," "," ", ESqlStatementType.sstteradatashowmethod);
230        addCmd(TBaseType.rrw_show,"table"," "," "," "," "," ", ESqlStatementType.sstteradatashowtable);
231        addCmd(TBaseType.rrw_show,"temporary","table"," "," "," "," ", ESqlStatementType.sstteradatashowtable);
232        addCmd(TBaseType.rrw_show,"trigger"," "," "," "," "," ", ESqlStatementType.sstteradatashowtrigger);
233        addCmd(TBaseType.rrw_show,"type"," "," "," "," "," ", ESqlStatementType.sstteradatashowtype);
234        addCmd(TBaseType.rrw_show,"view"," "," "," "," "," ", ESqlStatementType.sstteradatashowview);
235        addCmd(TBaseType.rrw_teradata_upd," "," "," "," "," "," ", ESqlStatementType.sstupdate);
236        addCmd(TBaseType.rrw_update," "," "," "," "," "," ", ESqlStatementType.sstupdate);
237        addCmd(TBaseType.rrw_teradata_using," "," "," "," "," "," ", ESqlStatementType.sstteradatausing);
238        addCmd(TBaseType.rrw_teradata_wait," "," "," "," "," "," ", ESqlStatementType.sstteradatawait);
239    }
240
241    @Override
242    protected String getToken1Str(int token1) {
243        // Handle Teradata vendor-specific reserved words
244        switch (token1) {
245            case TBaseType.rrw_teradata_wait:
246                return "wait";
247            case TBaseType.rrw_teradata_using:
248                return "using";
249            case TBaseType.rrw_teradata_upd:
250                return "update";
251            case TBaseType.rrw_teradata_sel:
252                return "select";
253            case TBaseType.rrw_teradata_restart:
254                return "restart";
255            case TBaseType.rrw_teradata_position:
256                return "position";
257            case TBaseType.rrw_teradata_modify:
258                return "modify";
259            case TBaseType.rrw_teradata_logon:
260                return "logon";
261            case TBaseType.rrw_teradata_locking:
262                return "locking";
263            case TBaseType.rrw_teradata_ins:
264                return "insert";
265            case TBaseType.rrw_teradata_help:
266                return "help";
267            case TBaseType.rrw_teradata_give:
268                return "give";
269            case TBaseType.rrw_teradata_exit:
270                return "exit";
271            case TBaseType.rrw_teradata_echo:
272                return "echo";
273            case TBaseType.rrw_teradata_dump:
274                return "dump";
275            case TBaseType.rrw_teradata_diagnostic:
276                return "diagnostic";
277            case TBaseType.rrw_teradata_del:
278                return "delete";
279            case TBaseType.rrw_teradata_cv:
280                return "create view";
281            case TBaseType.rrw_teradata_collect:
282                return "collect";
283            case TBaseType.rrw_teradata_cm:
284                return "create macro";
285            case TBaseType.rrw_teradata_label:
286                return "label";
287            default:
288                return null;
289        }
290    }
291
292    @Override
293    public TCustomSqlStatement issql(TSourceToken token, EFindSqlStateType state, TCustomSqlStatement currentStatement) {
294        TCustomSqlStatement ret = null;
295        if (token == null) return null;
296
297        int k;
298        boolean lcisnewsql;
299        TSourceToken lcpprevsolidtoken,lcnextsolidtoken,lctoken;
300
301        gnewsqlstatementtype = ESqlStatementType.sstinvalid;
302
303        if ( (token.tokencode  == TBaseType.cmtdoublehyphen)
304                || (token.tokencode  == TBaseType.cmtslashstar)
305                || (token.tokencode  == TBaseType.lexspace)
306                || (token.tokencode  == TBaseType.lexnewline)
307                || (token.tokentype == ETokenType.ttsemicolon) )
308        {
309            return ret;
310        }
311
312        int lcpos = token.posinlist;
313        TSourceTokenList lcsourcetokenlist = token.container;
314
315        //subquery after semicolon || at first line
316        if ( (state == EFindSqlStateType.stnormal) && (token.tokentype == ETokenType.ttleftparenthesis) )
317        {
318            k = lcsourcetokenlist.solidtokenafterpos(lcpos,TBaseType.rrw_select,1,"(");
319            if ( k >0 )
320            {
321                ret =  new TSelectSqlStatement(vendor);
322            }else{
323                k = lcsourcetokenlist.solidtokenafterpos(lcpos,TBaseType.rrw_teradata_sel,1,"(");
324                if ( k >0 )
325                {
326                    ret =  new TSelectSqlStatement(vendor);
327                }
328            }
329
330            return ret;
331        }
332
333        //cte
334        if ( (state == EFindSqlStateType.stnormal) && (token.tokencode == TBaseType.rrw_with) )
335        {
336            ret = findcte(token);
337            if ( (ret != null) )  return ret;
338        }
339
340        // using
341        if ( (state == EFindSqlStateType.stnormal) && (token.tokencode == TBaseType.rrw_teradata_using) ){
342           //return mapTeradataUsing(token);
343            return new TTeradataUsing(vendor);
344        }
345        
346        if ( (state == EFindSqlStateType.stnormal) &&
347                ((token.tokencode == TBaseType.rrw_lock)||(token.tokencode == TBaseType.rrw_teradata_locking)) ){
348            return new TTeradataLock(vendor);
349        }
350
351        // Teradata temporal qualifier prefixes:
352        // CURRENT VALIDTIME, CURRENT TRANSACTIONTIME, SEQUENCED VALIDTIME, NONSEQUENCED VALIDTIME,
353        // NONSEQUENCED TRANSACTIONTIME, VALIDTIME AS OF, TRANSACTIONTIME AS OF, NONTEMPORAL
354        if ( state == EFindSqlStateType.stnormal ) {
355            ret = handleTemporalQualifier(token, lcsourcetokenlist);
356            if (ret != null) return ret;
357        }
358
359        gnewsqlstatementtype = getStatementTypeForToken(token);
360
361        TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
362        switch(gnewsqlstatementtype ) {   //
363            case sstinvalid:
364            {
365                ret = null;
366                break;
367            }
368            case sstselect:
369            {
370                lcisnewsql = true;
371
372                if ( state != EFindSqlStateType.stnormal )
373                {
374                    // lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
375                    if ( (lcprevsolidtoken != null) )
376                    {
377                        if ( lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis)
378                            lcisnewsql = false; //subqery
379                        else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_union )
380                            lcisnewsql = false;
381                        else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_intersect )
382                            lcisnewsql = false;
383                        else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_minus )
384                            lcisnewsql = false;
385                        else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_except )
386                            lcisnewsql = false;
387                        else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_return )
388                            lcisnewsql = false;
389                        else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_as )
390                        {
391                            if ( currentStatement.sqlstatementtype == ESqlStatementType.sstcreatetable )
392                                lcisnewsql = false;
393                            if ( currentStatement.sqlstatementtype == ESqlStatementType.sstcreateview )
394                                lcisnewsql = false;
395                            if ( currentStatement.sqlstatementtype == ESqlStatementType.sstteradatareplaceview )
396                                lcisnewsql = false;
397                        }
398
399                        if ( lcisnewsql && ( lcprevsolidtoken.tokencode == TBaseType.rrw_all) )
400                        {
401                            lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist);
402                            if ( (lcpprevsolidtoken != null) )
403                            {
404                                if ( lcpprevsolidtoken.tokencode == TBaseType.rrw_union )
405                                    lcisnewsql = false;
406                            }
407                        }
408
409                    }
410
411                    if ( (currentStatement != null) )
412                    {
413                        if ( currentStatement.sqlstatementtype == ESqlStatementType.sstinsert )
414                        {
415                        }
416                        else if ( currentStatement.sqlstatementtype == ESqlStatementType.sstcreateview ){
417                            lcisnewsql = false;
418                        }
419                    }
420
421                }
422
423                if ( lcisnewsql )
424                    ret =  new TSelectSqlStatement(vendor);
425
426                break;
427
428            }
429            case sstinsert:
430            {
431                lcisnewsql = true;
432                if ( state != EFindSqlStateType.stnormal )
433                {
434                    if ( (currentStatement != null) )
435                    {
436                        // merge
437                        if (currentStatement.sqlstatementtype == ESqlStatementType.sstmerge)
438                        {
439                              if (lcprevsolidtoken != null)
440                              {
441                                  if (lcprevsolidtoken.tokencode == TBaseType.rrw_then)
442                                  {lcisnewsql = false;}
443                              }
444                        }
445
446
447
448                        if ( currentStatement.sqlstatementtype == ESqlStatementType.sstteradatacreatetrigger )
449                        {
450                            if ( (lcprevsolidtoken != null) )
451                            {
452                                if ( lcprevsolidtoken.tokentype == ETokenType.ttcomma )
453                                    lcisnewsql = false;
454                                else if ( TBaseType.mycomparetext(lcprevsolidtoken.getAstext(),"after") == 0 )
455                                    lcisnewsql = false;
456                                else if ( TBaseType.mycomparetext(lcprevsolidtoken.getAstext(),"before") == 0 )
457                                    lcisnewsql = false;
458                                else if ( TBaseType.mycomparetext(lcprevsolidtoken.getAstext(), "of") == 0 )
459                                    lcisnewsql = false;
460                            }
461                        }
462
463
464                    }
465                }
466
467                if ( lcisnewsql )
468                {
469                    ret =  new TInsertSqlStatement(vendor);
470                    ret.dummytag = 1; //  select stmt in insert is permitted
471                    for ( k = lcpos + 1; k < lcsourcetokenlist.size();k++ )    // iterate
472                    {
473                        if ( lcsourcetokenlist.get(k).isnonsolidtoken() ) continue;
474                        if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_values ) break;
475                        // if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_go ) break;
476                        if ( lcsourcetokenlist.get(k).tokentype == ETokenType.ttsemicolon ) break;
477                        if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_select ) break;
478                        if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_execute ) break;
479                        if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_exec ) break;
480                    }    // for (
481                    if ( k > lcsourcetokenlist.size() - 1 )
482                        k = lcsourcetokenlist.size() - 1;
483
484                    for ( int i = lcpos + 1; i <=  k; i++ )    // iterate
485                    {
486                        lcsourcetokenlist.get(i).tokenstatus = ETokenStatus.tsignoredbygetrawstatement;
487                    }    // for (
488
489                }
490
491                break;
492            }
493            case sstupdate:
494            {
495                lcisnewsql = true;
496                if ( state != EFindSqlStateType.stnormal )
497                {
498                    // lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
499                    if ( (lcprevsolidtoken != null) )
500                    { //
501                        if ( lcprevsolidtoken.tokencode == TBaseType.rrw_on )
502                            lcisnewsql = false;
503                        else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_for )
504                            lcisnewsql = false;
505                    }
506
507                    lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos,1,false);
508                    if ( TBaseType.assigned(lcnextsolidtoken) )
509                    {
510                        if ( lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis)
511                        {
512                            k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist,TBaseType.rrw_select,1,"(");
513                            if ( k  == 0 ) lcisnewsql = false;
514                        }
515                    }
516
517
518                    if ( TBaseType.assigned(currentStatement) )
519                    {
520                        // merge
521                        if (currentStatement.sqlstatementtype == ESqlStatementType.sstmerge)
522                        {
523                              if (lcprevsolidtoken != null)
524                              {
525                                  if (lcprevsolidtoken.tokencode == TBaseType.rrw_then)
526                                  {lcisnewsql = false;}
527                              }
528                        }
529
530
531                        if ( currentStatement.sqlstatementtype == ESqlStatementType.sstteradatacreatetrigger )
532                        {
533                            if ( TBaseType.assigned(lcprevsolidtoken) )
534                            {
535                                if ( lcprevsolidtoken.tokentype == ETokenType.ttcomma )
536                                    lcisnewsql = false;
537                                else if ( TBaseType.mycomparetext(lcprevsolidtoken.getAstext(),"after") == 0 )
538                                    lcisnewsql = false;
539                                else if ( TBaseType.mycomparetext(lcprevsolidtoken.getAstext(),"before") == 0 )
540                                    lcisnewsql = false;
541                                else if ( TBaseType.mycomparetext(lcprevsolidtoken.getAstext(), "of") == 0 )
542                                    lcisnewsql = false;
543                            }
544                        }
545
546                    }
547                }
548
549                if ( lcisnewsql )
550                {
551                    ret =  new TUpdateSqlStatement(vendor);
552                    ret.dummytag = 1; // means set clause in update is not found yet, used to seperate set clause from set statement
553                }
554
555                break;
556            }
557            case sstdelete:
558            {
559                lcisnewsql = true;
560
561                if ( state != EFindSqlStateType.stnormal )
562                {
563                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
564                    if ( TBaseType.assigned(lcprevsolidtoken) )
565                    {
566                        if ( lcprevsolidtoken.tokencode == TBaseType.rrw_on )
567                            lcisnewsql = false;
568                    }
569
570                    if ( TBaseType.assigned(currentStatement) )
571                    {
572                        // merge
573                        if (currentStatement.sqlstatementtype == ESqlStatementType.sstmerge)
574                        {
575                              if (lcprevsolidtoken != null)
576                              {
577                                  if (lcprevsolidtoken.tokencode == TBaseType.rrw_then)
578                                  {lcisnewsql = false;}
579                              }
580                        }
581
582
583                        if ( currentStatement.sqlstatementtype == ESqlStatementType.sstteradatacreatetrigger )
584                        {
585                            if ( TBaseType.assigned(lcprevsolidtoken) )
586                            {
587                                if ( lcprevsolidtoken.tokentype == ETokenType.ttcomma )
588                                    lcisnewsql = false;
589                                else if ( TBaseType.mycomparetext(lcprevsolidtoken.getAstext(),"after") == 0 )
590                                    lcisnewsql = false;
591                                else if ( TBaseType.mycomparetext(lcprevsolidtoken.getAstext(),"before") == 0 )
592                                    lcisnewsql = false;
593                                else if ( TBaseType.mycomparetext(lcprevsolidtoken.getAstext(), "of") == 0 )
594                                    lcisnewsql = false;
595                            }
596                        }
597
598                    }
599                }
600
601                if ( lcisnewsql )
602                    ret =  new TDeleteSqlStatement(vendor);
603
604                break;
605            }
606            case sstcreatetable:
607            {
608                ret =  new TCreateTableSqlStatement(vendor);
609                break;
610            }
611            case sstaltertable:
612            case sstteradataaltertable:
613            {
614                ret =  new TAlterTableStatement(vendor);
615                break;
616            }
617            case sstteradatafetch:
618            {
619                ret =  new TMssqlFetch(vendor);
620                break;
621            }
622            case sstcreateprocedure :
623            case sstteradatareplaceprocedure:
624            {
625                ret = new TCreateProcedureStmt(vendor);
626                break;
627            }
628            case sstteradataalterprocedure:
629                ret = new TAlterProcedureStmt(vendor);
630                break;
631            case sstteradatacreatefunction :
632            case sstteradatareplacefunction:
633            {
634                ret =  new TTeradataCreateFunction(vendor);
635                break;
636            }
637            case sstteradataalterfunction:
638                ret =  new TAlterFunctionStmt(vendor);
639                break;
640            case sstteradatacreatetrigger :
641            case sstteradataaltertrigger:
642            case sstteradatareplacetrigger:
643            {                              
644                ret =  new TCreateTriggerStmt(vendor);
645                break;
646            }
647            case sstteradatagrant:
648            {
649                lcisnewsql = true;
650                // prev tokentext can't be with
651                if ( state != EFindSqlStateType.stnormal )
652                {
653                    if ( TBaseType.assigned(lcprevsolidtoken) )
654                    {
655                        if ( lcprevsolidtoken.tokencode == TBaseType.rrw_with )
656                        {
657                            ret = null;
658                            lcisnewsql = false;
659                        }
660                    }
661                }
662                if ( lcisnewsql )
663                {
664                    ret =  new TTeradataGrant(vendor);
665                    ret.sqlstatementtype = gnewsqlstatementtype;
666                    for ( k = lcpos + 1; k< lcsourcetokenlist.size();k++ )    // iterate
667                    {
668                        lctoken = lcsourcetokenlist.get(k);
669                        if (lctoken.isnonsolidtoken() ) continue;
670                        if ( lctoken.tokencode == TBaseType.rrw_go ) break;
671                        if ( lctoken.tokentype == ETokenType.ttsemicolon ) break;
672                        if ( lctoken.tokencode == TBaseType.rrw_to   ) break;
673                        lctoken.tokenstatus = ETokenStatus.tsignoredbygetrawstatement;
674                    }
675                }
676                break;
677            }
678            case sstdropindex:
679            {
680                ret =  new TDropIndexSqlStatement(vendor);
681                break;
682            }
683            case sstdroptable:
684            {
685                ret =  new TDropTableSqlStatement(vendor);
686                break;
687            }
688            case sstdropview:
689            {
690                ret =  new TDropViewSqlStatement(vendor);
691                break;
692            }
693            case sstteradatadropprocedure:
694                ret =  new TDropProcedureStmt(vendor);
695                break;
696            case sstteradatadropauthorization:
697            case sstteradatadropcast:
698            case sstteradatadropdatabase:
699            case sstteradatadropfunction:
700            case sstteradatadroptrigger:
701            case sstteradatadropordering:
702            case sstteradatadropprofile:
703            case sstteradatadropreplicationgroup:
704            case sstteradatadroprole:
705            case sstteradatadroptransform:
706            case sstteradatadroptype:
707            case sstteradatadropuser:
708            case sstteradatadropzone:
709            {
710                ret =  new TTeradataDropDbObject(EDbVendor.dbvteradata);
711                ret.sqlstatementtype = gnewsqlstatementtype;
712                break;
713            }
714            case sstteradatadropmacro:
715                ret = new TDropMacro(EDbVendor.dbvteradata);
716                break;
717            case sstteradatadropconstraint:
718                ret = new TDropConstraintStmt(EDbVendor.dbvteradata);
719                break;
720            case sstteradatabegintransaction:
721            {
722                ret =  new TBeginTran(vendor);
723                break;
724            }
725            case sstteradataendtransaction:
726            {
727                ret =  new TEndTran(vendor);
728                break;
729            }
730            case sstteradatacommit:
731            {
732                ret =  new TTeradataCommit(vendor);
733                break;
734            }
735            case sstteradatarollback:
736            {
737                ret =  new TTeradataRollback(vendor);
738                break;
739            }
740            case sstcreateindex:
741            {
742                ret =  new TCreateIndexSqlStatement(vendor);
743                break;
744            }
745            case sstmerge:
746            {
747                lcisnewsql = true;
748
749                if (state != EFindSqlStateType.stnormal)
750                {
751
752                    if (currentStatement != null)
753                    {
754                        // merge union, merge join
755                        if (currentStatement.sqlstatementtype == ESqlStatementType.sstselect)
756                        {
757                                    lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos,1,false);
758                                    if (lcnextsolidtoken != null)
759                                       {
760                                        if ((lcnextsolidtoken.tokencode == TBaseType.rrw_union) || (lcnextsolidtoken.tokencode == TBaseType.rrw_join))
761                                           {
762                                              lcisnewsql = false;
763                                           }
764                                        }
765                        }
766
767                    }
768                }
769
770                if (lcisnewsql)
771                {
772                    ret = new TMergeSqlStatement(vendor);
773                    ret.sqlstatementtype = gnewsqlstatementtype;
774                }
775
776                break;
777            }
778            case sstteradataexecute:
779            {
780                lcisnewsql = true;
781                // prev tokentext can't be with
782                if ( state != EFindSqlStateType.stnormal )
783                {
784                    if ( TBaseType.assigned(currentStatement) )
785                    {
786                        if ( currentStatement.sqlstatementtype == ESqlStatementType.sstinsert )
787                        {
788                            if ( currentStatement.dummytag == 1 )
789                            {
790                                lcisnewsql = false;
791                                currentStatement.dummytag = 0; // no select is permited after it
792                            }
793                        }
794
795                        if ( currentStatement.sqlstatementtype == ESqlStatementType.sstteradatagrant )
796                        {
797                            if ( TBaseType.assigned(lcprevsolidtoken) )
798                            {
799                                if ( lcprevsolidtoken.tokencode == TBaseType.rrw_grant )
800                                    lcisnewsql = false;
801                                else if ( lcprevsolidtoken.tokentype == ETokenType.ttcomma )
802                                    lcisnewsql = false;
803                            }
804                        }
805
806                        if (
807                                (currentStatement.sqlstatementtype == ESqlStatementType.sstcreateprocedure)
808                                        ||(      currentStatement.sqlstatementtype == ESqlStatementType.sstteradatacreatetrigger)
809                                        ||(      currentStatement.sqlstatementtype == ESqlStatementType.sstteradatacreatefunction)
810                                        ||(currentStatement.sqlstatementtype == ESqlStatementType.sstteradataalterprocedure)
811                                        ||(      currentStatement.sqlstatementtype == ESqlStatementType.sstteradataaltertrigger)
812                                        ||(      currentStatement.sqlstatementtype == ESqlStatementType.sstteradataalterfunction)
813                                )
814                        {
815                            if ( TBaseType.assigned(lcprevsolidtoken) )
816                            {
817                                if ( lcprevsolidtoken.tokencode == TBaseType.rrw_with )
818                                    lcisnewsql = false;
819                                else if ( lcprevsolidtoken.tokentype == ETokenType.ttcomma )
820                                    lcisnewsql = false;
821                            }
822                        }
823                    }
824                }
825                if ( lcisnewsql )
826                {
827                    ret =  new TTeradataExecute(vendor);
828                }
829                break;
830            }
831            case sstteradatasetsession:
832            {
833                ret =  new TTeradataSetSession(vendor);
834                break;
835            }
836            case sstteradatadatabase:
837                if (token.isFirstTokenOfLine()){
838                    ret =  new TTeradataSetSession(vendor);
839                }
840
841                break;
842            case sstteradatasettimezone:
843            {
844                ret =  new TTeradataSetTimezone(vendor);
845                break;
846            }
847            case sstteradatasetrole:
848            {
849                ret =  new TTeradataSetRole(vendor);
850                break;
851            }
852            case sstteradataendlogging:
853            {
854                ret =  new TTeradataEndLogging(vendor);
855                break;
856            }
857            case sstteradatabeginlogging:
858            {
859                ret =  new TTeradataBeginLogging(vendor);
860                break;
861            }
862            case sstteradataabort:
863            {
864                ret = new TTeradataAbort(vendor);
865                break;
866            }
867            case sstteradatareplaceview:
868            case sstcreateview:
869            {
870                ret = new TCreateViewSqlStatement(vendor);
871                ret.sqlstatementtype = ESqlStatementType.sstcreateview;
872                break;
873            }
874            case sstteradatacollectstatistics:
875            {
876                ret = new TTeradataCollectStatistics(vendor);
877                break;
878            }
879            case sstteradatagive:
880            {
881                ret = new TTeradataGive(vendor);
882                break;
883            }
884            case sstteradatacall:
885                ret = new TCallStatement(vendor);
886                break;
887            case sstteradatacreatemacro:
888            case sstteradatareplacemacro:
889                ret = new TCreateMacro(vendor);
890                break;
891            case sstteradatarenametable:
892            case sstteradatarenameview:
893                ret = new TRenameStmt(vendor);
894                break;
895            case sstteradatacomment:
896                ret = new TCommentOnSqlStmt(vendor);
897                break;
898            case sstteradatacheckworkload:
899                ret = new TCheckWorkload(vendor);
900                break;
901            case sstgetdiagnostics:
902                ret = new TGetDiagStmt(vendor);
903                break;
904            case sstteradatacreaterole:
905                ret = new TCreateRoleStmt(vendor);
906                break;
907            case sstteradatarevoke:
908                ret = new TRevokeStmt(vendor);
909                break;
910            case sstteradataalterzone:
911                ret = new TAlterZoneStmt(vendor);
912                break;
913            case sstcreatezone:
914                ret = new TCreateZoneStmt(vendor);
915                break;
916            case sstteradataalterconstraint:
917                ret = new TAlterConstraintStmt(vendor);
918                break;
919            case sstExplain:
920                ret = new TExplainPlan(vendor);
921                break;
922            case sstteradatareleaseLock:
923                ret = new TTeradataReleaseLockStmt(vendor);
924                break;
925            default:
926            {
927                ret =  new TTeradataNotImplement(vendor);
928                ret.sqlstatementtype = gnewsqlstatementtype;
929                break;
930            }
931        }    // case
932
933        return ret;
934    }
935
936    /**
937     * Detect Teradata temporal qualifier prefixes and return the appropriate DML statement.
938     * Temporal qualifiers are prefixes like CURRENT VALIDTIME, SEQUENCED VALIDTIME,
939     * NONSEQUENCED TRANSACTIONTIME, NONTEMPORAL, etc. that precede DML statements.
940     */
941    private TCustomSqlStatement handleTemporalQualifier(TSourceToken token, TSourceTokenList tokenList) {
942        int pos = token.posinlist;
943        String txt = token.getAstext();
944
945        boolean isTemporalStart = false;
946
947        if (TBaseType.mycomparetext(txt, "NONTEMPORAL") == 0) {
948            isTemporalStart = true;
949        } else if (TBaseType.mycomparetext(txt, "CURRENT") == 0 ||
950                   TBaseType.mycomparetext(txt, "SEQUENCED") == 0 ||
951                   TBaseType.mycomparetext(txt, "NONSEQUENCED") == 0 ||
952                   TBaseType.mycomparetext(txt, "NOSEQUENCED") == 0) {
953            // Must be followed by VALIDTIME or TRANSACTIONTIME
954            TSourceToken next = tokenList.nextsolidtoken(pos, 1, false);
955            if (next != null) {
956                String nextTxt = next.getAstext();
957                if (TBaseType.mycomparetext(nextTxt, "VALIDTIME") == 0 ||
958                    TBaseType.mycomparetext(nextTxt, "TRANSACTIONTIME") == 0) {
959                    isTemporalStart = true;
960                }
961            }
962        } else if (TBaseType.mycomparetext(txt, "VALIDTIME") == 0 ||
963                   TBaseType.mycomparetext(txt, "TRANSACTIONTIME") == 0) {
964            // VALIDTIME/TRANSACTIONTIME as first token (e.g., VALIDTIME AS OF ...)
965            TSourceToken next = tokenList.nextsolidtoken(pos, 1, false);
966            if (next != null) {
967                String nextTxt = next.getAstext();
968                if (TBaseType.mycomparetext(nextTxt, "AS") == 0) {
969                    isTemporalStart = true;
970                }
971            }
972        }
973
974        if (!isTemporalStart) return null;
975
976        // Scan ahead to find the DML keyword
977        for (int i = pos + 1; i < tokenList.size(); i++) {
978            TSourceToken t = tokenList.get(i);
979            if (t.isnonsolidtoken()) continue;
980            if (t.tokentype == ETokenType.ttsemicolon) break;
981
982            if (t.tokencode == TBaseType.rrw_select || t.tokencode == TBaseType.rrw_teradata_sel) {
983                // Mark tokens between temporal start and SELECT (inclusive) as ignored
984                for (int j = pos + 1; j <= i; j++) {
985                    tokenList.get(j).tokenstatus = ETokenStatus.tsignoredbygetrawstatement;
986                }
987                return new TSelectSqlStatement(vendor);
988            }
989            if (t.tokencode == TBaseType.rrw_insert || t.tokencode == TBaseType.rrw_teradata_ins) {
990                for (int j = pos + 1; j <= i; j++) {
991                    tokenList.get(j).tokenstatus = ETokenStatus.tsignoredbygetrawstatement;
992                }
993                TInsertSqlStatement insertStmt = new TInsertSqlStatement(vendor);
994                insertStmt.dummytag = 1;
995                // Also mark tokens after INSERT up to VALUES/SELECT/semicolon
996                int k;
997                for (k = i + 1; k < tokenList.size(); k++) {
998                    TSourceToken tk = tokenList.get(k);
999                    if (tk.isnonsolidtoken()) continue;
1000                    if (tk.tokencode == TBaseType.rrw_values) break;
1001                    if (tk.tokentype == ETokenType.ttsemicolon) break;
1002                    if (tk.tokencode == TBaseType.rrw_select) break;
1003                    if (tk.tokencode == TBaseType.rrw_execute) break;
1004                    if (tk.tokencode == TBaseType.rrw_exec) break;
1005                }
1006                if (k > tokenList.size() - 1) k = tokenList.size() - 1;
1007                for (int j = i + 1; j <= k; j++) {
1008                    tokenList.get(j).tokenstatus = ETokenStatus.tsignoredbygetrawstatement;
1009                }
1010                return insertStmt;
1011            }
1012            if (t.tokencode == TBaseType.rrw_delete || t.tokencode == TBaseType.rrw_teradata_del) {
1013                for (int j = pos + 1; j <= i; j++) {
1014                    tokenList.get(j).tokenstatus = ETokenStatus.tsignoredbygetrawstatement;
1015                }
1016                return new TDeleteSqlStatement(vendor);
1017            }
1018            if (t.tokencode == TBaseType.rrw_update || t.tokencode == TBaseType.rrw_teradata_upd) {
1019                for (int j = pos + 1; j <= i; j++) {
1020                    tokenList.get(j).tokenstatus = ETokenStatus.tsignoredbygetrawstatement;
1021                }
1022                TUpdateSqlStatement updateStmt = new TUpdateSqlStatement(vendor);
1023                updateStmt.dummytag = 1;
1024                return updateStmt;
1025            }
1026            if (t.tokencode == TBaseType.rrw_merge) {
1027                for (int j = pos + 1; j <= i; j++) {
1028                    tokenList.get(j).tokenstatus = ETokenStatus.tsignoredbygetrawstatement;
1029                }
1030                return new TMergeSqlStatement(vendor);
1031            }
1032        }
1033        return null;
1034    }
1035
1036}