001package gudusoft.gsqlparser.sqlcmds; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.stmt.*; 005import gudusoft.gsqlparser.stmt.informix.*; 006import gudusoft.gsqlparser.stmt.mssql.TMssqlRollback; 007import gudusoft.gsqlparser.stmt.oracle.*; 008 009/** 010 * Informix SQL command resolver. 011 * Contains all Informix-specific SQL command recognition logic. 012 * 013 * @since 3.1.0.9 014 */ 015public class TSqlCmdsInformix extends AbstractSqlCmds { 016 017 // Temporary field for statement type during issql processing 018 private ESqlStatementType gnewsqlstatementtype = ESqlStatementType.sstinvalid; 019 020 public TSqlCmdsInformix() { 021 super(EDbVendor.dbvinformix); 022 } 023 024 @Override 025 protected String getToken1Str(int token1) { 026 // Informix vendor-specific reserved words (tokens > TBaseType.rrw_abort) 027 switch (token1) { 028 case TBaseType.rrw_informix_unload: 029 return "unload"; 030 case TBaseType.rrw_informix_whenever: 031 return "whenever"; 032 case TBaseType.rrw_informix_put: 033 return "put"; 034 case TBaseType.rrw_informix_output: 035 return "output"; 036 case TBaseType.rrw_informix_info: 037 return "info"; 038 case TBaseType.rrw_informix_connect_to: 039 return "connect"; 040 default: 041 return null; 042 } 043 } 044 045 @Override 046 protected void initializeCommands() { 047 // Informix commands must be sorted alphabetically by token1 048 // cmd must be sort alphabetically 049 addCmd(TBaseType.rrw_allocate, "collection", ESqlStatementType.sstinformixAllocateCollection); 050 addCmd(TBaseType.rrw_allocate, "descriptor", ESqlStatementType.sstinformixAllocateDescriptor); 051 addCmd(TBaseType.rrw_alter, "access_method", ESqlStatementType.sstinformixAlterAccess_Method); 052 addCmd(TBaseType.rrw_alter, "fragment", ESqlStatementType.sstinformixAlterFragment); 053 addCmd(TBaseType.rrw_alter, "function", ESqlStatementType.sstinformixAlterFunction); 054 addCmd(TBaseType.rrw_alter, "index", ESqlStatementType.sstinformixAlterIndex); 055 addCmd(TBaseType.rrw_alter, "procedure", ESqlStatementType.sstinformixAlterProcedure); 056 addCmd(TBaseType.rrw_alter, "routine", ESqlStatementType.sstinformixAlterRoutine); 057 addCmd(TBaseType.rrw_alter, "security", "label", "component", ESqlStatementType.sstinformixAlterSecurityLabelComponent); 058 addCmd(TBaseType.rrw_alter, "sequence", ESqlStatementType.sstinformixAlterSequence); 059 addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstinformixAlterTable); 060 addCmd(TBaseType.rrw_alter, "trusted", "context", ESqlStatementType.sstinformixAlterTrustedContext); 061 addCmd(TBaseType.rrw_alter, "user", ESqlStatementType.sstinformixAlterUser); 062 addCmd(TBaseType.rrw_begin, ESqlStatementType.sstinformixBegin); 063 addCmd(TBaseType.rrw_close, "database", ESqlStatementType.sstinformixCloseDatabase); 064 addCmd(TBaseType.rrw_close, ESqlStatementType.sstinformixClose); 065 addCmd(TBaseType.rrw_commit, ESqlStatementType.sstinformixCommit); 066 addCmd(TBaseType.rrw_informix_connect_to, ESqlStatementType.sstinformixConnect); 067 addCmd(TBaseType.rrw_create, "access_method", ESqlStatementType.sstinformixCreateAccess_Method); 068 addCmd(TBaseType.rrw_create, "aggregate", ESqlStatementType.sstinformixCreateAggregate); 069 addCmd(TBaseType.rrw_create, "cast", ESqlStatementType.sstinformixCreateCast); 070 addCmd(TBaseType.rrw_create, "cluster", "index", ESqlStatementType.sstinformixCreateIndex); 071 addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstinformixCreateDatabase); 072 addCmd(TBaseType.rrw_create, "dba", "function", ESqlStatementType.sstinformixCreateFunction); 073 addCmd(TBaseType.rrw_create, "dba", "procedure", ESqlStatementType.sstinformixCreateProcedure); 074 addCmd(TBaseType.rrw_create, "default", "user", ESqlStatementType.sstinformixCreateDefaultUser); 075 addCmd(TBaseType.rrw_create, "distinct", "cluster", "index", ESqlStatementType.sstinformixCreateIndex); 076 addCmd(TBaseType.rrw_create, "distinct", "index", ESqlStatementType.sstinformixCreateIndex); 077 addCmd(TBaseType.rrw_create, "distinct", "type", ESqlStatementType.sstinformixCreateDistinctType); 078 addCmd(TBaseType.rrw_create, "external", "table", ESqlStatementType.sstinformixCreateExternalTable); 079 addCmd(TBaseType.rrw_create, "function", "from", ESqlStatementType.sstinformixCreateFunctionFrom); 080 addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstinformixCreateFunction); 081 addCmd(TBaseType.rrw_create, "index", ESqlStatementType.sstinformixCreateIndex); 082 addCmd(TBaseType.rrw_create, "opaque", "type", ESqlStatementType.sstinformixCreateOpaqueType); 083 addCmd(TBaseType.rrw_create, "opclass", ESqlStatementType.sstinformixCreateOpclass); 084 addCmd(TBaseType.rrw_create, "private", "synonym", ESqlStatementType.sstinformixCreateSynonym); 085 addCmd(TBaseType.rrw_create, "procedure", "from", ESqlStatementType.sstinformixCreateProcedureFrom); 086 addCmd(TBaseType.rrw_create, "procedure", ESqlStatementType.sstinformixCreateProcedure); 087 addCmd(TBaseType.rrw_create, "public", "synonym", ESqlStatementType.sstinformixCreateSynonym); 088 addCmd(TBaseType.rrw_create, "raw", "table", ESqlStatementType.sstcreatetable); 089 addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstinformixCreateRole); 090 addCmd(TBaseType.rrw_create, "routine", "from", ESqlStatementType.sstinformixCreateRoutineFrom); 091 addCmd(TBaseType.rrw_create, "row", "type", ESqlStatementType.sstinformixCreateRowType); 092 addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstinformixCreateSchema); 093 addCmd(TBaseType.rrw_create, "security", "label", "component", ESqlStatementType.sstinformixCreateSecurityLabelComponent); 094 addCmd(TBaseType.rrw_create, "security", "label", ESqlStatementType.sstinformixCreateSecurityLabel); 095 addCmd(TBaseType.rrw_create, "security", "policy", ESqlStatementType.sstinformixCreateSecurityPolicy); 096 addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstinformixCreateSequence); 097 addCmd(TBaseType.rrw_create, "standard", "table", ESqlStatementType.sstcreatetable); 098 addCmd(TBaseType.rrw_create, "synonym", ESqlStatementType.sstinformixCreateSynonym); 099 addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable); 100 addCmd(TBaseType.rrw_create, "temp", "table", ESqlStatementType.sstinformixCreateTempTable); 101 addCmd(TBaseType.rrw_create, "trigger", ESqlStatementType.sstcreatetrigger); 102 addCmd(TBaseType.rrw_create, "trusted", "context", ESqlStatementType.sstinformixCreateTrustedContext); 103 addCmd(TBaseType.rrw_create, "unique", "cluster", "index", ESqlStatementType.sstinformixCreateIndex); 104 addCmd(TBaseType.rrw_create, "unique", "index", ESqlStatementType.sstinformixCreateIndex); 105 addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstinformixCreateUser); 106 addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstinformixCreateView); 107 addCmd(TBaseType.rrw_create, "xadatasource", "type", ESqlStatementType.sstinformixCreateXaDatasourceType); 108 addCmd(TBaseType.rrw_create, "xadatasource", ESqlStatementType.sstinformixCreateXaDatasource); 109 //addCmd(TBaseType.rrw_database, ESqlStatementType.sstinformixDatabase); 110 addCmd(TBaseType.rrw_deallocate, "collection", ESqlStatementType.sstinformixDeallocateCollection); 111 addCmd(TBaseType.rrw_deallocate, "descriptor", ESqlStatementType.sstinformixDeallocateDescriptor); 112 addCmd(TBaseType.rrw_deallocate, "row", ESqlStatementType.sstinformixDeallocateRow); 113 addCmd(TBaseType.rrw_declare, ESqlStatementType.sstinformixDeclare); 114 addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete); 115 addCmd(TBaseType.rrw_describe, "input", ESqlStatementType.sstinformixDescribeInput); 116 addCmd(TBaseType.rrw_describe, ESqlStatementType.sstinformixDescribe); 117 addCmd(TBaseType.rrw_disconnect, ESqlStatementType.sstinformixDisconnect); 118 addCmd(TBaseType.rrw_drop, "access_method", ESqlStatementType.sstinformixDropAccess_Method); 119 addCmd(TBaseType.rrw_drop, "aggregate", ESqlStatementType.sstinformixDropAggregate); 120 addCmd(TBaseType.rrw_drop, "cast", ESqlStatementType.sstinformixDropCast); 121 addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstdropdatabase); 122 addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstinformixDropFunction); 123 addCmd(TBaseType.rrw_drop, "index", ESqlStatementType.sstinformixDropIndex); 124 addCmd(TBaseType.rrw_drop, "opclass", ESqlStatementType.sstinformixDropOpclass); 125 addCmd(TBaseType.rrw_drop, "procedure", ESqlStatementType.sstinformixDropProcedure); 126 addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstinformixDropRole); 127 addCmd(TBaseType.rrw_drop, "routine", ESqlStatementType.sstinformixDropRoutine); 128 addCmd(TBaseType.rrw_drop, "row", "type", ESqlStatementType.sstinformixDropRowType); 129 addCmd(TBaseType.rrw_drop, "security", ESqlStatementType.sstinformixDropSecurity); 130 addCmd(TBaseType.rrw_drop, "sequence", ESqlStatementType.sstinformixDropSequence); 131 addCmd(TBaseType.rrw_drop, "synonym", ESqlStatementType.sstinformixDropSynonym); 132 addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstinformixDropTable); 133 addCmd(TBaseType.rrw_drop, "trigger", ESqlStatementType.sstinformixDropTrigger); 134 addCmd(TBaseType.rrw_drop, "trusted", "context", ESqlStatementType.sstinformixDropTrustedContext); 135 addCmd(TBaseType.rrw_drop, "type", ESqlStatementType.sstinformixDropType); 136 addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstinformixDropUser); 137 addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstinformixDropView); 138 addCmd(TBaseType.rrw_drop, "xadatasource", "type", ESqlStatementType.sstinformixDropXaDatasourceType); 139 addCmd(TBaseType.rrw_drop, "xadatasource", ESqlStatementType.sstinformixDropXaDatasource); 140 addCmd(TBaseType.rrw_exec, ESqlStatementType.sstinformixExecute); 141 addCmd(TBaseType.rrw_execute, "function", ESqlStatementType.sstinformixExecuteFunction); 142 addCmd(TBaseType.rrw_execute, "immediate", ESqlStatementType.sstinformixExecuteImmediate); 143 addCmd(TBaseType.rrw_execute, "procedure", ESqlStatementType.sstinformixExecuteProcedure); 144 addCmd(TBaseType.rrw_execute, ESqlStatementType.sstinformixExecute); 145 addCmd(TBaseType.rrw_fetch, ESqlStatementType.sstinformixFetch); 146 addCmd(TBaseType.rrw_flush, ESqlStatementType.sstinformixFlush); 147 addCmd(TBaseType.rrw_free, ESqlStatementType.sstinformixFree); 148 addCmd(TBaseType.rrw_get, "descriptor", ESqlStatementType.sstinformixGetDescriptor); 149 addCmd(TBaseType.rrw_get, "diagnostics", ESqlStatementType.sstinformixGetDiagnostics); 150 addCmd(TBaseType.rrw_grant, "fragment", ESqlStatementType.sstinformixGrantFragment); 151 addCmd(TBaseType.rrw_grant, ESqlStatementType.sstinformixGrant); 152 addCmd(TBaseType.rrw_informix_info, ESqlStatementType.sstinformixInfo); 153 addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert); 154 addCmd(TBaseType.rrw_load, ESqlStatementType.sstinformixLoad); 155 addCmd(TBaseType.rrw_lock, "table", ESqlStatementType.sstinformixLockTable); 156 addCmd(TBaseType.rrw_merge, ESqlStatementType.sstmerge); 157 addCmd(TBaseType.rrw_open, ESqlStatementType.sstinformixOpen); 158 addCmd(TBaseType.rrw_informix_output, ESqlStatementType.sstinformixOutput); 159 addCmd(TBaseType.rrw_prepare, ESqlStatementType.sstinformixPrepare); 160 addCmd(TBaseType.rrw_informix_put, ESqlStatementType.sstinformixPut); 161 addCmd(TBaseType.rrw_release, "savepoint", ESqlStatementType.sstinformixReleaseSavepoint); 162 addCmd(TBaseType.rrw_rename, "column", ESqlStatementType.sstinformixRenameColumn); 163 addCmd(TBaseType.rrw_rename, "database", ESqlStatementType.sstinformixRenameDatabase); 164 addCmd(TBaseType.rrw_rename, "index", ESqlStatementType.sstinformixRenameIndex); 165 addCmd(TBaseType.rrw_rename, "security", ESqlStatementType.sstinformixRenameSecurity); 166 addCmd(TBaseType.rrw_rename, "sequence", ESqlStatementType.sstinformixRenameSequence); 167 addCmd(TBaseType.rrw_rename, "table", ESqlStatementType.sstinformixRenameTable); 168 addCmd(TBaseType.rrw_rename, "trusted", "context", ESqlStatementType.sstinformixRenameTrustedContext); 169 addCmd(TBaseType.rrw_rename, "user", ESqlStatementType.sstinformixRenameUser); 170 addCmd(TBaseType.rrw_revoke, "fragment", ESqlStatementType.sstinformixRevokeFragment); 171 addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstinformixRevoke); 172 addCmd(TBaseType.rrw_rollback, "work", ESqlStatementType.sstinformixRollbackWork); 173 addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstinformixRollbackWork); 174 addCmd(TBaseType.rrw_save, "external", "directives", ESqlStatementType.sstinformixSaveExternalDirectives); 175 addCmd(TBaseType.rrw_savepoint, ESqlStatementType.sstinformixSavepoint); 176 addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect); 177 addCmd(TBaseType.rrw_set, "autofree", ESqlStatementType.sstinformixSetAutofree); 178 addCmd(TBaseType.rrw_set, "collation", ESqlStatementType.sstinformixSetCollation); 179 addCmd(TBaseType.rrw_set, "connection", ESqlStatementType.sstinformixSetConnection); 180 addCmd(TBaseType.rrw_set, "constraints", ESqlStatementType.sstinformixSetConstraints); 181 addCmd(TBaseType.rrw_set, "database", "object", ESqlStatementType.sstinformixSetDatabaseObject); 182 addCmd(TBaseType.rrw_set, "dataskip", ESqlStatementType.sstinformixSetDataskip); 183 addCmd(TBaseType.rrw_set, "debug", "file", ESqlStatementType.sstinformixSetDebugFile); 184 addCmd(TBaseType.rrw_set, "defferred_prepare", ESqlStatementType.sstinformixSetDeferred_Prepare); 185 addCmd(TBaseType.rrw_set, "descriptor", ESqlStatementType.sstinformixSetDescriptor); 186 addCmd(TBaseType.rrw_set, "encryption", "password", ESqlStatementType.sstinformixSetEncryptionPassword); 187 addCmd(TBaseType.rrw_set, "environment", ESqlStatementType.sstinformixSetEnvironment); 188 addCmd(TBaseType.rrw_set, "explain", ESqlStatementType.sstinformixSetExplain); 189 addCmd(TBaseType.rrw_set, "indexes", ESqlStatementType.sstinformixSetIndexes); 190 addCmd(TBaseType.rrw_set, "isolation", ESqlStatementType.sstinformixSetIsolation); 191 addCmd(TBaseType.rrw_set, "lock", "mode", ESqlStatementType.sstinformixSetLockMode); 192 addCmd(TBaseType.rrw_set, "log", ESqlStatementType.sstinformixSetLog); 193 addCmd(TBaseType.rrw_set, "optimization", ESqlStatementType.sstinformixSetOptimization); 194 addCmd(TBaseType.rrw_set, "pdqpriority", ESqlStatementType.sstinformixSetPDQPriority); 195 addCmd(TBaseType.rrw_set, "role", ESqlStatementType.sstinformixSetRole); 196 addCmd(TBaseType.rrw_set, "session", "authorization", ESqlStatementType.sstinformixSetSessionAuthorization); 197 addCmd(TBaseType.rrw_set, "statement", "cache", ESqlStatementType.sstinformixSetStatementCache); 198 addCmd(TBaseType.rrw_set, "transaction", "mode", ESqlStatementType.sstinformixSetTransactionMode); 199 addCmd(TBaseType.rrw_set, "transaction", ESqlStatementType.sstinformixSetTransaction); 200 addCmd(TBaseType.rrw_set, "triggers", ESqlStatementType.sstinformixSetTriggers); 201 addCmd(TBaseType.rrw_set, "user", "password", ESqlStatementType.sstinformixSetUserPassword); 202 addCmd(TBaseType.rrw_start, "violations", "table", ESqlStatementType.sstinformixStartViolationsTable); 203 addCmd(TBaseType.rrw_stop, "violations", "table", ESqlStatementType.sstinformixStopViolationsTable); 204 addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstTruncate); 205 addCmd(TBaseType.rrw_informix_unload, ESqlStatementType.sstinformixUnload); 206 addCmd(TBaseType.rrw_unlock, "table", ESqlStatementType.sstinformixUnlockTable); 207 addCmd(TBaseType.rrw_update, "statistics", ESqlStatementType.sstinformixUpdateStatistics); 208 addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate); 209 addCmd(TBaseType.rrw_informix_whenever, ESqlStatementType.sstinformixWhenever); 210 } 211 212 @Override 213 public TCustomSqlStatement issql(TSourceToken pcst, EFindSqlStateType pstate, TCustomSqlStatement psqlstatement) { 214 TCustomSqlStatement ret = null; 215 216 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 217 218 if ((pcst.tokencode == TBaseType.cmtdoublehyphen) 219 || (pcst.tokencode == TBaseType.cmtslashstar) 220 || (pcst.tokencode == TBaseType.lexspace) 221 || (pcst.tokencode == TBaseType.lexnewline) 222 || (pcst.tokentype == ETokenType.ttsemicolon)) { 223 return null; 224 } 225 226 int lcpos = pcst.posinlist; 227 TSourceTokenList lcsourcetokenlist = pcst.container; 228 TCustomSqlStatement lccurrentsqlstatement = psqlstatement; 229 230 //subquery after semicolon or at first line 231 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokentype == ETokenType.ttleftparenthesis)) { // ( 232 int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "("); 233 if (k > 0) { 234 ret = new TSelectSqlStatement(this.vendor); 235 } 236 237 return ret; 238 } 239 240 //cte 241 if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_with)) { 242 ret = findcte(pcst); 243 if ((ret != null)) return ret; 244 } 245 246 gnewsqlstatementtype = getStatementTypeForToken(pcst); 247 248 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 249 switch (gnewsqlstatementtype) { // 250 case sstinvalid: { 251 ret = null; 252 253 if (pstate == EFindSqlStateType.stnormal) { 254 if (pcst.tokencode == TBaseType.label_begin) { 255 ret = new TCommonBlock(this.vendor); 256 gnewsqlstatementtype = ret.sqlstatementtype; 257 } else if (pcst.tokencode == TBaseType.rrw_declare) { 258 ret = new TCommonBlock(this.vendor); 259 gnewsqlstatementtype = ret.sqlstatementtype; 260 } else if (pcst.tokencode == TBaseType.rrw_begin) { 261 ret = new TCommonBlock(this.vendor); 262 gnewsqlstatementtype = ret.sqlstatementtype; 263 } else if (pcst.tokencode == TBaseType.rrw_procedure) { 264 ret = new TPlsqlCreateProcedure(this.vendor); 265 gnewsqlstatementtype = ret.sqlstatementtype; 266 } else if (pcst.tokencode == TBaseType.rrw_function) { 267 ret = new TPlsqlCreateFunction(this.vendor); 268 gnewsqlstatementtype = ret.sqlstatementtype; 269 } else if (pcst.tokencode == TBaseType.rrw_package) { 270 ret = new TPlsqlCreatePackage(this.vendor); 271 gnewsqlstatementtype = ret.sqlstatementtype; 272 } 273 } 274 break; 275 } 276 case sstselect: { 277 boolean lcisnewsql = true; 278 279 if (pstate != EFindSqlStateType.stnormal) { 280 if ((lcprevsolidtoken != null)) { 281 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 282 lcisnewsql = false; //subqery 283 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 284 lcisnewsql = false; 285 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 286 lcisnewsql = false; 287 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 288 lcisnewsql = false; 289 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 290 lcisnewsql = false; 291 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 292 lcisnewsql = false; 293 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 294 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 295 lcisnewsql = false; 296 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 297 lcisnewsql = false; 298 } 299 300 if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) { 301 TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 302 if ((lcpprevsolidtoken != null)) { 303 if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union) 304 lcisnewsql = false; 305 } 306 } 307 308 } 309 310 311 if ((lccurrentsqlstatement != null)) { 312 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert) 313 lcisnewsql = false; 314 } 315 316 } 317 318 if (lcisnewsql) 319 ret = new TSelectSqlStatement(this.vendor); 320 321 break; 322 } 323 case sstinsert: { 324 boolean lcisnewsql = true; 325 if (pstate != EFindSqlStateType.stnormal) { 326 if ((lccurrentsqlstatement != null)) { 327 // merge 328 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstmerge) { 329 if (lcprevsolidtoken != null) { 330 if (lcprevsolidtoken.tokencode == TBaseType.rrw_then) { 331 lcisnewsql = false; 332 } 333 } 334 } 335 336 } 337 } 338 339 if (lcisnewsql) 340 ret = new TInsertSqlStatement(this.vendor); 341 342 break; 343 } 344 case sstupdate: { 345 boolean lcisnewsql = true; 346 if (pstate != EFindSqlStateType.stnormal) { 347 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 348 if ((lcprevsolidtoken != null)) { // 349 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 350 lcisnewsql = false; 351 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 352 lcisnewsql = false; 353 } 354 355 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 356 if ((lcnextsolidtoken != null)) { 357 if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) { 358 int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "("); 359 if (k == 0) lcisnewsql = false; 360 } 361 } 362 363 364 if ((lccurrentsqlstatement != null)) { 365 // merge 366 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstmerge) { 367 if (lcprevsolidtoken != null) { 368 if (lcprevsolidtoken.tokencode == TBaseType.rrw_then) { 369 lcisnewsql = false; 370 } 371 } 372 } 373 } 374 } 375 376 if (lcisnewsql) { 377 ret = new TUpdateSqlStatement(this.vendor); 378 ret.dummytag = 1; // means set clause in update is not found yet, used to seperate set clause from set statement 379 } 380 break; 381 } 382 case sstdelete: { 383 boolean lcisnewsql = true; 384 385 if (pstate != EFindSqlStateType.stnormal) { 386 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 387 if ((lcprevsolidtoken != null)) { 388 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 389 lcisnewsql = false; 390 } 391 392 if ((lccurrentsqlstatement != null)) { 393 // merge 394 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstmerge) { 395 if (lcprevsolidtoken != null) { 396 if (lcprevsolidtoken.tokencode == TBaseType.rrw_then) { 397 lcisnewsql = false; 398 } 399 } 400 } 401 } 402 } 403 404 if (lcisnewsql) 405 ret = new TDeleteSqlStatement(this.vendor); 406 407 break; 408 } 409 case sstmerge: { 410 ret = new TMergeSqlStatement(this.vendor); 411 ret.sqlstatementtype = gnewsqlstatementtype; 412 break; 413 } 414 case sstinformixCommit: { 415 ret = new TUnknownSqlStatement(this.vendor); 416 ret.sqlstatementtype = gnewsqlstatementtype; 417 break; 418 } 419 case sstinformixSavepoint: { 420 ret = new TUnknownSqlStatement(this.vendor); 421 ret.sqlstatementtype = gnewsqlstatementtype; 422 break; 423 } 424 case sstinformixRevoke: { 425 ret = new TUnknownSqlStatement(this.vendor); 426 ret.sqlstatementtype = gnewsqlstatementtype; 427 break; 428 } 429 case sstinformixGrant: { 430 ret = new TUnknownSqlStatement(this.vendor); 431 ret.sqlstatementtype = gnewsqlstatementtype; 432 break; 433 } 434 case sstTruncate: { 435 ret = new TTruncateStatement(this.vendor); 436 ret.sqlstatementtype = gnewsqlstatementtype; 437 break; 438 } 439 case sstcreatetable: 440 case sstinformixCreateTempTable: { 441 ret = new TCreateTableSqlStatement(this.vendor); 442 break; 443 } 444 case sstinformixCreateView: { 445 ret = new TCreateViewSqlStatement(this.vendor); 446 break; 447 } 448 case sstinformixCreateIndex: { 449 ret = new TCreateIndexSqlStatement(this.vendor); 450 break; 451 } 452 case sstinformixCreateDatabase: { 453 ret = new TCreateDatabaseSqlStatement(this.vendor); 454 break; 455 } 456 case sstinformixDropTable: { 457 ret = new TDropTableSqlStatement(this.vendor); 458 break; 459 } 460 case sstinformixDropView: { 461 ret = new TDropViewSqlStatement(this.vendor); 462 break; 463 } 464 case sstinformixDropIndex: { 465 ret = new TDropIndexSqlStatement(this.vendor); 466 break; 467 } 468 case sstinformixDropRowType: { 469 ret = new TInformixDropRowTypeStmt(this.vendor); 470 break; 471 } 472 case sstinformixDropSequence: { 473 ret = new TDropSequenceStmt(this.vendor); 474 break; 475 } 476 case sstinformixDropSynonym: { 477 ret = new TDropSynonymStmt(this.vendor); 478 break; 479 } 480 case sstinformixAlterTable: { 481 ret = new TAlterTableStatement(this.vendor); 482 break; 483 } 484 case sstinformixCreateProcedure: { 485 ret = new TInformixCreateProcedure(this.vendor); 486 ret.sqlstatementtype = gnewsqlstatementtype; 487 break; 488 } 489 case sstinformixCreateFunction: { 490 ret = new TInformixCreateFunction(this.vendor); 491 ret.sqlstatementtype = gnewsqlstatementtype; 492 break; 493 } 494 case sstcreatetrigger: { 495 ret = new TCreateTriggerStmt(this.vendor); 496 break; 497 } 498 case sstinformixExecuteImmediate: { 499 ret = new TInformixExecuteImmediate(this.vendor); 500 break; 501 } 502 case sstinformixCreateSequence: 503 case sstinformixAlterSequence: { 504 ret = new TCreateSequenceStmt(this.vendor); 505 break; 506 } 507 case sstinformixCreateSynonym: { 508 ret = new TCreateSynonymStmt(this.vendor); 509 break; 510 } 511 case sstinformixExecuteFunction: { 512 ret = new TInformixExecuteFunction(this.vendor); 513 break; 514 } 515 case sstinformixExecuteProcedure: { 516 ret = new TInformixExecuteProcedure(this.vendor); 517 break; 518 } 519 case sstinformixCreateRowType: { 520 ret = new TInformixCreateRowTypeStmt(this.vendor); 521 break; 522 } 523 case sstinformixPut: 524 case sstinformixInfo: { 525 ret = null; 526 527 if (pstate == EFindSqlStateType.stnormal) { 528 ret = new TUnknownSqlStatement(this.vendor); 529 ret.sqlstatementtype = gnewsqlstatementtype; 530 } 531 break; 532 } 533 case sstinformixAlterIndex: { 534 ret = new TAlterIndexStmt(this.vendor); 535 break; 536 } 537 case sstinformixRenameColumn: 538 case sstinformixRenameTable: 539 case sstinformixRenameSequence: 540 case sstinformixRenameIndex: { 541 ret = new TRenameStmt(this.vendor); 542 break; 543 } 544 case sstdropdatabase: 545 ret = new TDropDatabaseStmt(this.vendor); 546 break; 547 case sstinformixRollbackWork: { 548 ret = new TMssqlRollback(this.vendor); 549 break; 550 } 551 default: { 552 ret = new TUnknownSqlStatement(this.vendor); 553 ret.sqlstatementtype = gnewsqlstatementtype; 554 break; 555 } 556 } // case 557 558 return ret; 559 } 560}