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