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