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}