001package gudusoft.gsqlparser.sqlcmds; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.stmt.*; 005import gudusoft.gsqlparser.stmt.oracle.*; 006 007/** 008 * Oracle SQL command resolver. 009 * Contains all Oracle-specific SQL command recognition logic. 010 * 011 * @since 3.1.0.9 012 */ 013public class TSqlCmdsOracle extends AbstractSqlCmds { 014 015 // Temporary field for statement type during issql processing 016 private ESqlStatementType gnewsqlstatementtype = ESqlStatementType.sstinvalid; 017 018 public TSqlCmdsOracle() { 019 super(EDbVendor.dbvoracle); 020 } 021 022 @Override 023 protected String getToken1Str(int token1) { 024 // Oracle currently has no vendor-specific reserved words requiring token1Str 025 // Override this method when Oracle-specific tokens > TBaseType.rrw_abort are added 026 return null; 027 } 028 029 @Override 030 protected void initializeCommands() { 031 // Oracle commands must be sorted alphabetically by token1 032 addCmd(TBaseType.rrw_alter, "cluster", ESqlStatementType.sstoraclealtercluster); 033 addCmd(TBaseType.rrw_alter, "database", ESqlStatementType.sstoraclealterdatabase); 034 addCmd(TBaseType.rrw_alter, "dimension", ESqlStatementType.sstoraclealterdimension); 035 addCmd(TBaseType.rrw_alter, "diskgroup", ESqlStatementType.sstoraclealterdiskgroup); 036 addCmd(TBaseType.rrw_alter, "function", ESqlStatementType.sstoraclealterfunction); 037 addCmd(TBaseType.rrw_alter, "index", ESqlStatementType.sstoraclealterindex); 038 addCmd(TBaseType.rrw_alter, "indextype", ESqlStatementType.sstoraclealterindextype); 039 addCmd(TBaseType.rrw_alter, "java", ESqlStatementType.sstoraclealterjava); 040 addCmd(TBaseType.rrw_alter, "materialized", "view", "log", ESqlStatementType.sstoraclealtermaterializedviewlog); 041 addCmd(TBaseType.rrw_alter, "materialized", "view", ESqlStatementType.sstAlterMaterializedView); 042 addCmd(TBaseType.rrw_alter, "operator", ESqlStatementType.sstoraclealteroperator); 043 addCmd(TBaseType.rrw_alter, "outline", ESqlStatementType.sstoraclealteroutline); 044 addCmd(TBaseType.rrw_alter, "package", ESqlStatementType.sstoraclealterpackage); 045 addCmd(TBaseType.rrw_alter, "procedure", ESqlStatementType.sstoraclealterprocedure); 046 addCmd(TBaseType.rrw_alter, "profile", ESqlStatementType.sstoraclealterprofile); 047 addCmd(TBaseType.rrw_alter, "resource", "cost", ESqlStatementType.sstoraclealterresourcecost); 048 addCmd(TBaseType.rrw_alter, "role", ESqlStatementType.sstoraclealterrole); 049 addCmd(TBaseType.rrw_alter, "rollback", "segment", ESqlStatementType.sstoraclealterrollbacksegment); 050 addCmd(TBaseType.rrw_alter, "sequence", ESqlStatementType.sstoraclealtersequence); 051 addCmd(TBaseType.rrw_alter, "session", ESqlStatementType.sstoraclealtersession); 052 addCmd(TBaseType.rrw_alter, "system", ESqlStatementType.sstoraclealtersystem); 053 addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstaltertable); 054 addCmd(TBaseType.rrw_alter, "tablespace", ESqlStatementType.sstoraclealtertablespace); 055 addCmd(TBaseType.rrw_alter, "trigger", ESqlStatementType.sstaltertrigger); 056 addCmd(TBaseType.rrw_alter, "type", ESqlStatementType.sstoraclealtertype); 057 addCmd(TBaseType.rrw_alter, "user", ESqlStatementType.sstoraclealteruser); 058 addCmd(TBaseType.rrw_alter, "view", ESqlStatementType.sstoraclealterview); 059 addCmd(TBaseType.rrw_analyze, ESqlStatementType.sstoracleanalyze); 060 addCmd(TBaseType.rrw_associate, "statistics", ESqlStatementType.sstoracleassociatestatistics); 061 addCmd(TBaseType.rrw_audit, ESqlStatementType.sstoracleaudit); 062 addCmd(TBaseType.rrw_call, ESqlStatementType.sstoraclecall); 063 addCmd(TBaseType.rrw_comment, ESqlStatementType.sstCommentOn); 064 addCmd(TBaseType.rrw_commit, ESqlStatementType.sstoraclecommit); 065 addCmd(TBaseType.rrw_create, "bigfile", "tablespace", ESqlStatementType.sstoraclecreatetablespace); 066 addCmd(TBaseType.rrw_create, "bitmap", "index", ESqlStatementType.sstoraclecreateindex); 067 addCmd(TBaseType.rrw_create, "cluster", ESqlStatementType.sstoraclecreatecluster); 068 addCmd(TBaseType.rrw_create, "context", ESqlStatementType.sstoraclecreatecontext); 069 addCmd(TBaseType.rrw_create, "controlfile", ESqlStatementType.sstoraclecreatecontrolfile); 070 addCmd(TBaseType.rrw_create, "editionable", "function", ESqlStatementType.sstplsql_createfunction); 071 addCmd(TBaseType.rrw_create, "editionable", "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 072 addCmd(TBaseType.rrw_create, "editionable", "package", ESqlStatementType.sstplsql_createpackage); 073 addCmd(TBaseType.rrw_create, "editionable", "procedure", ESqlStatementType.sstplsql_createprocedure); 074 addCmd(TBaseType.rrw_create, "editioning", "view", ESqlStatementType.sstoraclecreateview); 075 addCmd(TBaseType.rrw_create, "database", "link", ESqlStatementType.sstoraclecreatedatabaselink); 076 addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstoraclecreatedatabase); 077 addCmd(TBaseType.rrw_create, "dimension", ESqlStatementType.sstoraclecreatedimension); 078 addCmd(TBaseType.rrw_create, "directory", ESqlStatementType.sstoraclecreatedirectory); 079 addCmd(TBaseType.rrw_create, "diskgroup", ESqlStatementType.sstoraclecreatediskgroup); 080 addCmd(TBaseType.rrw_create, "force", "view", ESqlStatementType.sstoraclecreateview); 081 addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstplsql_createfunction); 082 addCmd(TBaseType.rrw_create, "global", "temp", "table", ESqlStatementType.sstcreatetable); 083 addCmd(TBaseType.rrw_create, "global", "temporary", "table", ESqlStatementType.sstcreatetable); 084 addCmd(TBaseType.rrw_create, "index", ESqlStatementType.sstoraclecreateindex); 085 addCmd(TBaseType.rrw_create, "indextype", ESqlStatementType.sstoraclecreateindextype); 086 addCmd(TBaseType.rrw_create, "java", ESqlStatementType.sstoraclecreatejava); 087 addCmd(TBaseType.rrw_create, "library", ESqlStatementType.sstoraclecreatelibrary); 088 addCmd(TBaseType.rrw_create, "materialized", "view", "log", ESqlStatementType.sstoraclecreatematerializedviewlog); 089 addCmd(TBaseType.rrw_create, "materialized", "view", ESqlStatementType.sstcreatematerializedview); 090 addCmd(TBaseType.rrw_create, "noforce", "view", ESqlStatementType.sstoraclecreateview); 091 addCmd(TBaseType.rrw_create, "noneditionable", "function", ESqlStatementType.sstplsql_createfunction); 092 addCmd(TBaseType.rrw_create, "noneditionable", "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 093 addCmd(TBaseType.rrw_create, "noneditionable", "package", ESqlStatementType.sstplsql_createpackage); 094 addCmd(TBaseType.rrw_create, "noneditionable", "procedure", ESqlStatementType.sstplsql_createprocedure); 095 addCmd(TBaseType.rrw_create, "operator", ESqlStatementType.sstoraclecreateoperator); 096 addCmd(TBaseType.rrw_create, "or", "replace", "context", ESqlStatementType.sstoraclecreatecontext); 097 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "editioning", "view", ESqlStatementType.sstoraclecreateview); 098 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "function", ESqlStatementType.sstplsql_createfunction); 099 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 100 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "package", ESqlStatementType.sstplsql_createpackage); 101 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "procedure", ESqlStatementType.sstplsql_createprocedure); 102 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "trigger", ESqlStatementType.sstplsql_createtrigger); 103 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "view", ESqlStatementType.sstoraclecreateview); 104 addCmd(TBaseType.rrw_create, "or", "replace", "editioning", "view", ESqlStatementType.sstoraclecreateview); 105 addCmd(TBaseType.rrw_create, "or", "replace", "directory", ESqlStatementType.sstoraclecreatedirectory); 106 addCmd(TBaseType.rrw_create, "or", "replace", "force", "view", ESqlStatementType.sstoraclecreateview); 107 addCmd(TBaseType.rrw_create, "or", "replace", "force", "editionable", "view", ESqlStatementType.sstoraclecreateview); 108 addCmd(TBaseType.rrw_create, "or", "replace", "force", "editionable", "editioning", "view", ESqlStatementType.sstoraclecreateview); 109 addCmd(TBaseType.rrw_create, "or", "replace", "force", "editioning", "view", ESqlStatementType.sstoraclecreateview); 110 addCmd(TBaseType.rrw_create, "or", "replace", "force", "noneditionable", "view", ESqlStatementType.sstoraclecreateview); 111 addCmd(TBaseType.rrw_create, "or", "replace", "function", ESqlStatementType.sstplsql_createfunction); 112 addCmd(TBaseType.rrw_create, "or", "replace", "library", ESqlStatementType.sstoraclecreatelibrary); 113 addCmd(TBaseType.rrw_create, "or", "replace", "noforce", "view", ESqlStatementType.sstoraclecreateview); 114 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "function", ESqlStatementType.sstplsql_createfunction); 115 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 116 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "package", ESqlStatementType.sstplsql_createpackage); 117 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "procedure", ESqlStatementType.sstplsql_createprocedure); 118 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "public", "synonym", ESqlStatementType.sstoraclecreatesynonym); 119 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "trigger", ESqlStatementType.sstplsql_createtrigger); 120 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "view", ESqlStatementType.sstoraclecreateview); 121 addCmd(TBaseType.rrw_create, "or", "replace", "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 122 addCmd(TBaseType.rrw_create, "or", "replace", "package", ESqlStatementType.sstplsql_createpackage); 123 addCmd(TBaseType.rrw_create, "or", "replace", "procedure", ESqlStatementType.sstplsql_createprocedure); 124 addCmd(TBaseType.rrw_create, "or", "replace", "public", "synonym", ESqlStatementType.sstoraclecreatesynonym); 125 addCmd(TBaseType.rrw_create, "or", "replace", "synonym", ESqlStatementType.sstoraclecreatesynonym); 126 addCmd(TBaseType.rrw_create, "or", "replace", "trigger", ESqlStatementType.sstplsql_createtrigger); 127 addCmd(TBaseType.rrw_create, "or", "replace", "type", "body", ESqlStatementType.sstplsql_createtypebody); 128 addCmd(TBaseType.rrw_create, "or", "replace", "type", ESqlStatementType.sstplsql_createtype_placeholder); 129 addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstoraclecreateview); 130 addCmd(TBaseType.rrw_create, "outline", ESqlStatementType.sstoraclecreateoutline); 131 addCmd(TBaseType.rrw_create, "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 132 addCmd(TBaseType.rrw_create, "package", ESqlStatementType.sstplsql_createpackage); 133 addCmd(TBaseType.rrw_create, "pfile", ESqlStatementType.sstoraclecreatepfile); 134 addCmd(TBaseType.rrw_create, "procedure", ESqlStatementType.sstplsql_createprocedure); 135 addCmd(TBaseType.rrw_create, "profile", ESqlStatementType.sstoraclecreateprofile); 136 addCmd(TBaseType.rrw_create, "public", "database", "link", ESqlStatementType.sstoraclecreatedatabaselink); 137 addCmd(TBaseType.rrw_create, "public", "synonym", ESqlStatementType.sstoraclecreatesynonym); 138 addCmd(TBaseType.rrw_create, "resotre", "point", ESqlStatementType.sstoraclecreaterestorepoint); 139 addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstoraclecreaterole); 140 addCmd(TBaseType.rrw_create, "rollback", "segment", ESqlStatementType.sstoraclecreaterollbacksegment); 141 addCmd(TBaseType.rrw_create, "shared", "database", "link", ESqlStatementType.sstoraclecreatedatabaselink); 142 addCmd(TBaseType.rrw_create, "shared", "public", "database", "link", ESqlStatementType.sstoraclecreatedatabaselink); 143 addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstoraclecreateschema); 144 addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstoraclecreatesequence); 145 addCmd(TBaseType.rrw_create, "smallfile", "tablespace", ESqlStatementType.sstoraclecreatetablespace); 146 addCmd(TBaseType.rrw_create, "spfile", ESqlStatementType.sstoraclecreatespfile); 147 addCmd(TBaseType.rrw_create, "synonym", ESqlStatementType.sstoraclecreatesynonym); 148 addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable); 149 addCmd(TBaseType.rrw_create, "tablespace", ESqlStatementType.sstoraclecreatetablespace); 150 addCmd(TBaseType.rrw_create, "temporary", "tablespace", ESqlStatementType.sstoraclecreatetablespace); 151 addCmd(TBaseType.rrw_create, "trigger", ESqlStatementType.sstplsql_createtrigger); 152 addCmd(TBaseType.rrw_create, "type", "body", ESqlStatementType.sstplsql_createtypebody); 153 addCmd(TBaseType.rrw_create, "type", ESqlStatementType.sstplsql_createtype_placeholder); 154 addCmd(TBaseType.rrw_create, "undo", "tablespace", ESqlStatementType.sstoraclecreatetablespace); 155 addCmd(TBaseType.rrw_create, "unique", "index", ESqlStatementType.sstoraclecreateindex); 156 addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstoraclecreateuser); 157 addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstoraclecreateview); 158 addCmd(TBaseType.rrw_custom, "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 159 addCmd(TBaseType.rrw_custom, "package", ESqlStatementType.sstplsql_createpackage); 160 addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete); 161 addCmd(TBaseType.rrw_disassociate, "statistics", ESqlStatementType.sstoracledisassociatestatistics); 162 addCmd(TBaseType.rrw_drop, "cluster", ESqlStatementType.sstoracledropcluster); 163 addCmd(TBaseType.rrw_drop, "context", ESqlStatementType.sstoracledropcontext); 164 addCmd(TBaseType.rrw_drop, "database", "link", ESqlStatementType.sstoracledropdatabaselink); 165 addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstoracledropdatabase); 166 addCmd(TBaseType.rrw_drop, "dimension", ESqlStatementType.sstoracledropdimension); 167 addCmd(TBaseType.rrw_drop, "directory", ESqlStatementType.sstoracledropdirectory); 168 addCmd(TBaseType.rrw_drop, "diskgroup", ESqlStatementType.sstoracledropdiskgroup); 169 addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstoracledropfunction); 170 addCmd(TBaseType.rrw_drop, "index", ESqlStatementType.sstoracledropindex); 171 addCmd(TBaseType.rrw_drop, "indextype", ESqlStatementType.sstoracledropindextype); 172 addCmd(TBaseType.rrw_drop, "java", ESqlStatementType.sstoracledropjava); 173 addCmd(TBaseType.rrw_drop, "library", ESqlStatementType.sstoracledroplibrary); 174 addCmd(TBaseType.rrw_drop, "materialized", "view", "log", ESqlStatementType.sstoracledropmaterializedviewlog); 175 addCmd(TBaseType.rrw_drop, "materialized", "view", ESqlStatementType.sstoracledropmaterializedview); 176 addCmd(TBaseType.rrw_drop, "operator", ESqlStatementType.sstoracledropoperator); 177 addCmd(TBaseType.rrw_drop, "outline", ESqlStatementType.sstoracledropoutline); 178 addCmd(TBaseType.rrw_drop, "package", ESqlStatementType.sstoracledroppackage); 179 addCmd(TBaseType.rrw_drop, "procedure", ESqlStatementType.sstoracledropprocedure); 180 addCmd(TBaseType.rrw_drop, "profile", ESqlStatementType.sstoracledropprofile); 181 addCmd(TBaseType.rrw_drop, "public", "database", "link", ESqlStatementType.sstoracledropdatabaselink); 182 addCmd(TBaseType.rrw_drop, "public", "synonym", ESqlStatementType.sstoracledropsynonym); 183 addCmd(TBaseType.rrw_drop, "restore", "point", ESqlStatementType.sstoracledroprestorepoint); 184 addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstoracledroprole); 185 addCmd(TBaseType.rrw_drop, "rollback", "segment", ESqlStatementType.sstoracledroprollbacksegment); 186 addCmd(TBaseType.rrw_drop, "sequence", ESqlStatementType.sstoracledropsequence); 187 addCmd(TBaseType.rrw_drop, "synonym", ESqlStatementType.sstoracledropsynonym); 188 addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstoracledroptable); 189 addCmd(TBaseType.rrw_drop, "tablespace", ESqlStatementType.sstoracledroptablespace); 190 addCmd(TBaseType.rrw_drop, "trigger", ESqlStatementType.sstoracledroptrigger); 191 addCmd(TBaseType.rrw_drop, "type", "body", ESqlStatementType.sstoracledroptypebody); 192 addCmd(TBaseType.rrw_drop, "type", ESqlStatementType.sstoracledroptype); 193 addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstoracledropuser); 194 addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstoracledropview); 195 addCmd(TBaseType.rrw_execute, "immediate", ESqlStatementType.sstplsql_execimmestmt); 196 addCmd(TBaseType.rrw_execute, ESqlStatementType.sstoracleexecuteprocedure); 197 addCmd(TBaseType.rrw_explain, "plan", ESqlStatementType.sstExplain); 198 addCmd(TBaseType.rrw_flashback, "database", ESqlStatementType.sstoracleflashbackdatabase); 199 addCmd(TBaseType.rrw_flashback, "table", ESqlStatementType.sstoracleflashbacktable); 200 addCmd(TBaseType.rrw_grant, ESqlStatementType.sstoraclegrant); 201 addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert); 202 addCmd(TBaseType.rrw_lock, "table", ESqlStatementType.sstoraclelocktable); 203 addCmd(TBaseType.rrw_merge, ESqlStatementType.sstmerge); 204 addCmd(TBaseType.rrw_noaudit, ESqlStatementType.sstoraclenoaudit); 205 addCmd(TBaseType.rrw_purge, ESqlStatementType.sstoraclepurge); 206 addCmd(TBaseType.rrw_rename, ESqlStatementType.sstoraclerename); 207 addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstoraclerevoke); 208 addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstoraclerollback); 209 addCmd(TBaseType.rrw_savepoint, ESqlStatementType.sstoraclesavepoint); 210 addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect); 211 addCmd(TBaseType.rrw_set, "constraint", ESqlStatementType.sstoraclesetconstraint); 212 addCmd(TBaseType.rrw_set, "constraints", ESqlStatementType.sstoraclesetconstraint); 213 addCmd(TBaseType.rrw_set, "role", ESqlStatementType.sstoraclesetrole); 214 addCmd(TBaseType.rrw_set, "transaction", ESqlStatementType.sstoraclesettransaction); 215 addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstTruncate); 216 addCmd(TBaseType.rrw_type2, ESqlStatementType.sstplsql_createtype_placeholder); 217 addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate); 218 } 219 220 @Override 221 public TCustomSqlStatement issql(TSourceToken token, EFindSqlStateType state, TCustomSqlStatement currentStatement) { 222 TCustomSqlStatement ret = null; 223 224 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 225 226 if ( (token.tokencode == TBaseType.cmtdoublehyphen) 227 || (token.tokencode == TBaseType.cmtslashstar) 228 || (token.tokencode == TBaseType.lexspace) 229 || (token.tokencode == TBaseType.lexnewline) 230 || (token.tokentype == ETokenType.ttsemicolon) ) 231 { 232 return null; 233 } 234 235 int lcpos = token.posinlist; 236 TSourceTokenList lcsourcetokenlist = token.container; 237 TCustomSqlStatement lccurrentsqlstatement = currentStatement; 238 239 //subquery after semicolon or at first line 240 if ( (state == EFindSqlStateType.stnormal) && (token.tokentype == ETokenType.ttleftparenthesis) ) // ( 241 { 242 int k = lcsourcetokenlist.solidtokenafterpos(lcpos,TBaseType.rrw_select,1,"("); 243 if ( k >0 ) 244 { 245 ret = new TSelectSqlStatement(this.vendor); 246 } 247 248 return ret; 249 } 250 251 //cte 252 if ( (state == EFindSqlStateType.stnormal) && (token.tokencode == TBaseType.rrw_with) ) 253 { 254 ret = findcte(token,this.vendor); 255 if ( (ret != null) ) return ret; 256 } 257 258 gnewsqlstatementtype = getStatementTypeForToken(token); 259 260 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 261 switch (gnewsqlstatementtype) { // 262 case sstinvalid: 263 { 264 ret = null; 265 266 if ( state == EFindSqlStateType.stnormal ) 267 { 268 if ( token.tokencode == TBaseType.label_begin ) 269 { 270 ret = new TCommonBlock(this.vendor); 271 gnewsqlstatementtype = ret.sqlstatementtype; 272 } 273 else if ( token.tokencode == TBaseType.rrw_declare ) 274 { 275 ret = new TCommonBlock(this.vendor); 276 gnewsqlstatementtype = ret.sqlstatementtype; 277 } 278 else if ( token.tokencode == TBaseType.rrw_begin ) 279 { 280 ret = new TCommonBlock(this.vendor); 281 gnewsqlstatementtype = ret.sqlstatementtype; 282 } 283 else if ( token.tokencode == TBaseType.rrw_procedure ) 284 { 285 ret = new TPlsqlCreateProcedure(this.vendor); 286 // ret.sqlstatementtype = ESqlStatementType.sstplsql_createprocedure; 287 gnewsqlstatementtype = ret.sqlstatementtype; 288 } 289 else if ( token.tokencode == TBaseType.rrw_function ) 290 { 291 ret = new TPlsqlCreateFunction(this.vendor); 292 // ret.sqlstatementtype = ESqlStatementType.sstplsql_createfunction; 293 gnewsqlstatementtype = ret.sqlstatementtype; 294 } 295 else if ( token.tokencode == TBaseType.rrw_package ) 296 { 297 ret = new TPlsqlCreatePackage(this.vendor); 298 // ret.sqlstatementtype = ESqlStatementType.sstplsql_createpackage; 299 gnewsqlstatementtype = ret.sqlstatementtype; 300 } 301 } 302 break; 303 } 304 case sstselect: 305 { 306 boolean lcisnewsql = true; 307 308 if ( state != EFindSqlStateType.stnormal ) 309 { 310 // lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 311 if ( (lcprevsolidtoken != null) ) 312 { 313 if ( lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 314 lcisnewsql = false; //subquery 315 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_union ) 316 lcisnewsql = false; 317 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_intersect ) 318 lcisnewsql = false; 319 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_minus ) 320 lcisnewsql = false; 321 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_except ) 322 lcisnewsql = false; 323 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_return ) 324 lcisnewsql = false; 325 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_as ) 326 { 327 if ( lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable ) 328 lcisnewsql = false; 329 if ( lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview ) 330 lcisnewsql = false; 331 } 332 333 if ( lcisnewsql && ( lcprevsolidtoken.tokencode == TBaseType.rrw_all) ) 334 { 335 TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 336 if ( (lcpprevsolidtoken != null) ) 337 { 338 if ( lcpprevsolidtoken.tokencode == TBaseType.rrw_union ) 339 lcisnewsql = false; 340 } 341 } 342 343 } 344 345 346 if ( (lccurrentsqlstatement != null) ) 347 { 348 switch (lccurrentsqlstatement.sqlstatementtype){ 349 case sstinsert: 350 lcisnewsql = false; 351 break; 352 case sstcreatetable: 353 case sstcreateview: 354 lcisnewsql = false; 355 break; 356 } 357 } 358 359 } 360 361 if ( lcisnewsql ) 362 ret = new TSelectSqlStatement(this.vendor); 363 364 break; 365 } 366 case sstinsert: 367 { 368 boolean lcisnewsql = true; 369 if ( state != EFindSqlStateType.stnormal ) 370 { 371 if ( (lccurrentsqlstatement != null) ) 372 { 373 374 } 375 } 376 377 if ( lcisnewsql ) 378 ret = new TInsertSqlStatement(this.vendor); 379 380 break; 381 } 382 case sstupdate: 383 { 384 boolean lcisnewsql = true; 385 if ( state != EFindSqlStateType.stnormal ) 386 { 387 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 388 if ( (lcprevsolidtoken != null) ) 389 { // 390 if ( lcprevsolidtoken.tokencode == TBaseType.rrw_on ) 391 lcisnewsql = false; 392 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_for ) 393 lcisnewsql = false; 394 } 395 396 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos,1,false); 397 if ( (lcnextsolidtoken != null) ) 398 { 399 if ( lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) 400 { 401 int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist,TBaseType.rrw_select,1,"("); 402 if ( k == 0 ) lcisnewsql = false; 403 } 404 } 405 406 407 if ( (lccurrentsqlstatement != null) ) 408 { 409 } 410 } 411 412 if ( lcisnewsql ) 413 { 414 ret = new TUpdateSqlStatement(this.vendor); 415 ret.dummytag = 1; // means set clause in update is not found yet, used to seperate set clause from set statement 416 } 417 break; 418 } 419 case sstdelete: 420 { 421 boolean lcisnewsql = true; 422 423 if ( state != EFindSqlStateType.stnormal ) 424 { 425 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 426 if ( (lcprevsolidtoken != null) ) 427 { 428 if ( lcprevsolidtoken.tokencode == TBaseType.rrw_on ) 429 lcisnewsql = false; 430 } 431 432 if ( (lccurrentsqlstatement != null) ) 433 { 434 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos,1,false); 435 if ( (lcnextsolidtoken != null) ){ 436 if (lcnextsolidtoken.tokencode == TBaseType.rrw_oracle_rows){ 437 lcisnewsql = false; 438 } 439 } 440 } 441 } 442 443 if ( lcisnewsql ) 444 ret = new TDeleteSqlStatement(this.vendor); 445 446 break; 447 } 448 case sstmerge: 449 { 450 ret = new TMergeSqlStatement(this.vendor); 451 ret.sqlstatementtype = gnewsqlstatementtype; 452 break; 453 } 454 case sstoraclecommit: 455 { 456 457 boolean lcisnewsql = true; 458 if ( state != EFindSqlStateType.stnormal ) 459 { 460 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 461 if ( (lcprevsolidtoken != null) ) 462 { // 463 if ( lcprevsolidtoken.tokencode == TBaseType.rrw_on ) 464 lcisnewsql = false; 465 } 466 } 467 468 if (lcisnewsql){ 469 ret = new TCommitStmt(this.vendor); 470 ret.sqlstatementtype = gnewsqlstatementtype; 471 } 472 473 break; 474 } 475 case sstoraclerollback: 476 { 477 ret = new TUnknownSqlStatement(this.vendor); 478 ret.sqlstatementtype = gnewsqlstatementtype; 479 break; 480 } 481 case sstoraclesavepoint: 482 { 483 ret = new TUnknownSqlStatement(this.vendor); 484 ret.sqlstatementtype = gnewsqlstatementtype; 485 break; 486 } 487 case sstoraclerevoke: 488 { 489 ret = new TUnknownSqlStatement(this.vendor); 490 ret.sqlstatementtype = gnewsqlstatementtype; 491 break; 492 } 493 case sstoraclegrant: 494 { 495 ret = new TUnknownSqlStatement(this.vendor); 496 ret.sqlstatementtype = gnewsqlstatementtype; 497 break; 498 } 499 case sstoracleanalyze: 500 { 501 ret = new TUnknownSqlStatement(this.vendor); 502 ret.sqlstatementtype = gnewsqlstatementtype; 503 break; 504 } 505 case sstTruncate: 506 { 507 ret = new TTruncateStatement(this.vendor); 508 ret.sqlstatementtype = gnewsqlstatementtype; 509 break; 510 } 511 case sstcreatetable: 512 { 513 ret = new TCreateTableSqlStatement(this.vendor); 514 break; 515 } 516 case sstoraclecreateview: 517 { 518 ret = new TCreateViewSqlStatement(this.vendor); 519 break; 520 } 521 case sstcreatematerializedview:{ 522 ret = new TCreateMaterializedSqlStatement(this.vendor); 523 break; 524 } 525 case sstoraclecreatematerializedviewlog:{ 526 ret = new TCreateMaterializedViewLogSqlStatement(this.vendor); 527 break; 528 } 529 case sstoraclecreateindex: 530 { 531 ret = new TCreateIndexSqlStatement(this.vendor); 532 break; 533 } 534 case sstoraclecreatedatabase: 535 { 536 ret = new TCreateDatabaseSqlStatement(this.vendor); 537 break; 538 } 539 case sstoracledroptable: 540 { 541 ret = new TDropTableSqlStatement(this.vendor); 542 break; 543 } 544 case sstoracledropview: 545 { 546 ret = new TDropViewSqlStatement(this.vendor); 547 break; 548 } 549 case sstoracledropindex: 550 { 551 ret = new TDropIndexSqlStatement(this.vendor); 552 break; 553 } 554 case sstaltertable: 555 { 556 ret = new TAlterTableStatement(this.vendor); 557 break; 558 } 559 case sstoraclealtersession: 560 { 561 ret = new TAlterSessionStatement(this.vendor); 562 break; 563 } 564 case sstplsql_createprocedure: 565 { 566 ret = new TPlsqlCreateProcedure(this.vendor); 567 ret.sqlstatementtype = gnewsqlstatementtype; 568 // System.out.println(gnewsqlstatementtype); 569 break; 570 } 571 case sstplsql_createfunction: 572 { 573 ret = new TPlsqlCreateFunction(this.vendor); 574 ret.sqlstatementtype = gnewsqlstatementtype; 575 // System.out.println(gnewsqlstatementtype); 576 break; 577 } 578 case sstplsql_createpackage: 579 { 580 ret = new TPlsqlCreatePackage(this.vendor); 581 ret.sqlstatementtype = gnewsqlstatementtype; 582 // System.out.println(gnewsqlstatementtype); 583 break; 584 } 585 case sstplsql_createtrigger: 586 { 587 ret = new TPlsqlCreateTrigger(this.vendor); 588 ret.sqlstatementtype = gnewsqlstatementtype; 589 // System.out.println(gnewsqlstatementtype); 590 break; 591 } 592 case sstplsql_execimmestmt: 593 { 594 ret = new TExecImmeStmt(this.vendor); 595 // ret.sqlstatementtype = gnewsqlstatementtype; 596 // System.out.println(gnewsqlstatementtype); 597 break; 598 } 599 case sstoraclecreatepackagebody: 600 { 601 ret = new TPlsqlCreatePackage(this.vendor); 602 ret.sqlstatementtype = ESqlStatementType.sstplsql_createpackage; 603 break; 604 } 605 case sstplsql_createtype_placeholder: 606 { 607 ret = new TPlsqlCreateType_Placeholder(this.vendor); 608 ret.sqlstatementtype = gnewsqlstatementtype; 609 // System.out.println(gnewsqlstatementtype); 610 break; 611 } 612 case sstplsql_createtypebody: 613 { 614 ret = new TPlsqlCreateTypeBody(this.vendor); 615 ret.sqlstatementtype = gnewsqlstatementtype; 616 break; 617 } 618 case sstCommentOn: 619 { 620 ret = new TCommentOnSqlStmt(this.vendor); 621 break; 622 } 623 case sstoraclecreatesequence: 624 { 625 ret = new TCreateSequenceStmt(this.vendor); 626 break; 627 } 628 case sstoraclecreatesynonym: 629 { 630 ret = new TCreateSynonymStmt(this.vendor); 631 break; 632 } 633 case sstoraclecreatedirectory: 634 { 635 ret = new TOracleCreateDirectoryStmt(this.vendor); 636 break; 637 } 638 case sstoracleexecuteprocedure: 639 { 640 ret = new TOracleExecuteProcedure(this.vendor); 641 break; 642 } 643 case sstExplain: 644 { 645 ret = new TExplainPlan(this.vendor); 646 break; 647 } 648 case sstoraclecreatelibrary: 649 ret = new TOracleCreateLibraryStmt(this.vendor); 650 break; 651 case sstaltertrigger: 652 ret = new TAlterTriggerStmt(this.vendor); 653 break; 654 case sstoracledropsequence: 655 ret = new TDropSequenceStmt(this.vendor); 656 break; 657 case sstoraclecall: 658 ret = new TCallStatement(this.vendor); 659 break; 660 case sstoraclealterview: 661 ret = new TAlterViewStatement(this.vendor); 662 break; 663 case sstoracledropsynonym: 664 ret = new TDropSynonymStmt(this.vendor); 665 break; 666 case sstoracledropdatabaselink: 667 ret = new TDropDatabaseLinkStmt(this.vendor); 668 break; 669 case sstoraclecreatedatabaselink: 670 ret = new TCreateDatabaseLinkStmt(this.vendor); 671 break; 672 case sstoracledropmaterializedview: 673 ret = new TDropMaterializedViewStmt(this.vendor); 674 break; 675 case sstoracledropmaterializedviewlog: 676 ret = new TDropMaterializedViewLogStmt(this.vendor); 677 break; 678 case sstoraclerename: 679 ret = new TRenameStmt(this.vendor); 680 break; 681 case sstoracledropprocedure: 682 ret = new TDropProcedureStmt(this.vendor); 683 break; 684 case sstAlterMaterializedView: 685 ret = new TAlterMaterializedViewStmt(this.vendor); 686 break; 687 case sstoracledroptrigger: 688 ret = new TDropTriggerSqlStatement(this.vendor); 689 break; 690 case sstoracledropfunction: 691 ret = new TDropFunctionStmt(this.vendor); 692 break; 693 case sstoraclealterindex: 694 ret = new TAlterIndexStmt(this.vendor); 695 break; 696 case sstoraclealtersequence: 697 ret = new TAlterSequenceStatement(this.vendor); 698 break; 699 case sstoraclealtertype: 700 ret = new TAlterTypeStatement(this.vendor); 701 break; 702 default: 703 { 704 ret = new TUnknownSqlStatement(this.vendor); 705 ret.sqlstatementtype = gnewsqlstatementtype; 706 break; 707 } 708 } // case 709 710 return ret; 711 } 712 713 private TCustomSqlStatement findcte(TSourceToken ptoken, EDbVendor pdbvendor){ 714 TCustomSqlStatement ret = null; 715 TSourceToken lctoken = null; 716 int lcnested = 0,k,j; 717 boolean inXmlNamespaces = false; 718 boolean isXmlNamespaces = false; 719 720 int lcpos = ptoken.posinlist; 721 TSourceTokenList lcsourcetokenlist = ptoken.container; 722 723 for (int i = lcpos + 1; i < lcsourcetokenlist.size();i++) // iterate 724 { 725 lctoken = lcsourcetokenlist.get(i); 726// if (lctoken.tokencode == TBaseType.rrw_postgresql_recursive){ 727// continue; 728// } 729 if (lctoken.tokencode == TBaseType.rrw_xmlnamespaces){ 730 inXmlNamespaces = true; 731 lcnested = 0; 732 continue; 733 } 734 if (inXmlNamespaces) { 735 if ( lctoken.tokentype == ETokenType.ttleftparenthesis) lcnested++; 736 if ( lctoken.tokentype == ETokenType.ttrightparenthesis) { 737 lcnested--; 738 if (lcnested == 0) { 739 inXmlNamespaces = false; 740 isXmlNamespaces = true; 741 } 742 } 743 continue; 744 } 745 if (( lctoken.tokencode == TBaseType.rrw_as ) || isXmlNamespaces) 746 { 747 lcnested = 0; 748 int startPos = i+1; 749 if (isXmlNamespaces) startPos = i; 750 for ( j = startPos; j < lcsourcetokenlist.size();j++) 751 { 752 lctoken = lcsourcetokenlist.get(j); 753 if (lctoken.isnonsolidtoken() ) continue; 754 if ( lctoken.tokentype == ETokenType.ttleftparenthesis) lcnested++; 755 if ( lctoken.tokentype == ETokenType.ttrightparenthesis) lcnested--; 756 757 758 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_delete) ) 759 { 760 ret = new TDeleteSqlStatement(pdbvendor); 761 ret.isctequery = true; 762 gnewsqlstatementtype = ESqlStatementType.sstdelete; 763 break; 764 } 765 766 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_merge) ) 767 { 768 ret = new TMergeSqlStatement(pdbvendor); 769 ret.isctequery = true; 770 gnewsqlstatementtype = ESqlStatementType.sstmerge; 771 break; 772 } 773 774 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_insert) ) 775 { 776 ret = new TInsertSqlStatement(pdbvendor); 777 ret.isctequery = true; 778 gnewsqlstatementtype = ESqlStatementType.sstinsert; 779 ret.dummytag = 1; // select stmt in insert is permitted 780 781 for ( k = lctoken.posinlist + 1; k < lcsourcetokenlist.size();k++) // iterate 782 { 783 if ( lcsourcetokenlist.get(k).isnonsolidtoken() ) continue; 784 if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_values ) break; 785 if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_go ) break; 786 if ( lcsourcetokenlist.get(k).tokentype == ETokenType.ttsemicolon ) break; 787 if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_select ) break; 788 if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_execute ) break; 789 if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_exec ) break; 790 } // for 791 if ( k > lcsourcetokenlist.size() - 1 ) 792 k = lcsourcetokenlist.size() - 1; 793 794 for (int m = lctoken.posinlist + 1; m <= k; m++) // iterate 795 { 796 lcsourcetokenlist.get(m).tokenstatus = ETokenStatus.tsignoredbygetrawstatement; 797 } // for 798 799 break; 800 } 801 802 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_values) &&(pdbvendor == EDbVendor.dbvpostgresql) ) 803 { 804 ret = new TSelectSqlStatement(pdbvendor); 805 ret.isctequery = true; 806 gnewsqlstatementtype = ESqlStatementType.sstselect; 807 break; 808 } 809 810 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_select) ) 811 { 812 ret = new TSelectSqlStatement(pdbvendor); 813 ret.isctequery = true; 814 gnewsqlstatementtype = ESqlStatementType.sstselect; 815 break; 816 } 817 818 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_update) ) 819 { 820 ret = new TUpdateSqlStatement(pdbvendor); 821 ret.isctequery = true; 822 ret.dummytag = 1; // means set clause in update is not found yet, used to seperate set clause from set statement 823 gnewsqlstatementtype = ESqlStatementType.sstupdate; 824 break; 825 } 826 827 if ( (pdbvendor == EDbVendor.dbvhive) && (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_from) ) 828 { 829 TSourceToken cmdToken = lctoken.searchToken(TBaseType.rrw_insert,3); 830 if (cmdToken != null){ 831 ret = new TInsertSqlStatement(pdbvendor); 832 ret.isctequery = true; 833 gnewsqlstatementtype = ESqlStatementType.sstinsert; 834 835 }else{ 836 ret = new TSelectSqlStatement(pdbvendor); 837 ret.isctequery = true; 838 gnewsqlstatementtype = ESqlStatementType.ssthiveFromQuery; 839 } 840 break; 841 } 842 843 844 } // for 845 846 if ( (ret != null) ) 847 { 848 for (k = lcpos + 1; k <= j;k++) // iterate 849 { 850 lcsourcetokenlist.get(k).tokenstatus = ETokenStatus.tsignoredbygetrawstatement; 851 } // for 852 break; 853 } 854 855 } 856 } 857 858 return ret; 859 } 860}