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, "library", ESqlStatementType.sstAlterLibrary); 039 addCmd(TBaseType.rrw_alter, "indextype", ESqlStatementType.sstoraclealterindextype); 040 addCmd(TBaseType.rrw_alter, "java", ESqlStatementType.sstoraclealterjava); 041 addCmd(TBaseType.rrw_alter, "materialized", "view", "log", ESqlStatementType.sstoraclealtermaterializedviewlog); 042 addCmd(TBaseType.rrw_alter, "materialized", "view", ESqlStatementType.sstAlterMaterializedView); 043 addCmd(TBaseType.rrw_alter, "operator", ESqlStatementType.sstoraclealteroperator); 044 addCmd(TBaseType.rrw_alter, "outline", ESqlStatementType.sstoraclealteroutline); 045 addCmd(TBaseType.rrw_alter, "package", ESqlStatementType.sstoraclealterpackage); 046 addCmd(TBaseType.rrw_alter, "procedure", ESqlStatementType.sstoraclealterprocedure); 047 addCmd(TBaseType.rrw_alter, "profile", ESqlStatementType.sstoraclealterprofile); 048 addCmd(TBaseType.rrw_alter, "resource", "cost", ESqlStatementType.sstoraclealterresourcecost); 049 addCmd(TBaseType.rrw_alter, "role", ESqlStatementType.sstoraclealterrole); 050 addCmd(TBaseType.rrw_alter, "rollback", "segment", ESqlStatementType.sstoraclealterrollbacksegment); 051 addCmd(TBaseType.rrw_alter, "sequence", ESqlStatementType.sstoraclealtersequence); 052 addCmd(TBaseType.rrw_alter, "session", ESqlStatementType.sstoraclealtersession); 053 addCmd(TBaseType.rrw_alter, "system", ESqlStatementType.sstoraclealtersystem); 054 addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstaltertable); 055 addCmd(TBaseType.rrw_alter, "tablespace", ESqlStatementType.sstoraclealtertablespace); 056 addCmd(TBaseType.rrw_alter, "trigger", ESqlStatementType.sstaltertrigger); 057 addCmd(TBaseType.rrw_alter, "type", ESqlStatementType.sstoraclealtertype); 058 addCmd(TBaseType.rrw_alter, "user", ESqlStatementType.sstoraclealteruser); 059 addCmd(TBaseType.rrw_alter, "view", ESqlStatementType.sstoraclealterview); 060 addCmd(TBaseType.rrw_analyze, ESqlStatementType.sstoracleanalyze); 061 addCmd(TBaseType.rrw_associate, "statistics", ESqlStatementType.sstoracleassociatestatistics); 062 addCmd(TBaseType.rrw_audit, ESqlStatementType.sstoracleaudit); 063 addCmd(TBaseType.rrw_call, ESqlStatementType.sstoraclecall); 064 addCmd(TBaseType.rrw_comment, ESqlStatementType.sstCommentOn); 065 addCmd(TBaseType.rrw_commit, ESqlStatementType.sstoraclecommit); 066 addCmd(TBaseType.rrw_create, "assertion", ESqlStatementType.sstcreateassertion); 067 addCmd(TBaseType.rrw_create, "bigfile", "tablespace", ESqlStatementType.sstoraclecreatetablespace); 068 addCmd(TBaseType.rrw_create, "bitmap", "index", ESqlStatementType.sstoraclecreateindex); 069 addCmd(TBaseType.rrw_create, "blockchain", "table", ESqlStatementType.sstcreatetable); 070 addCmd(TBaseType.rrw_create, "cluster", ESqlStatementType.sstoraclecreatecluster); 071 addCmd(TBaseType.rrw_create, "context", ESqlStatementType.sstoraclecreatecontext); 072 addCmd(TBaseType.rrw_create, "controlfile", ESqlStatementType.sstoraclecreatecontrolfile); 073 addCmd(TBaseType.rrw_create, "editionable", "editioning", "view", ESqlStatementType.sstoraclecreateview); 074 addCmd(TBaseType.rrw_create, "editionable", "function", ESqlStatementType.sstplsql_createfunction); 075 addCmd(TBaseType.rrw_create, "editionable", "library", ESqlStatementType.sstoraclecreatelibrary); 076 addCmd(TBaseType.rrw_create, "editionable", "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 077 addCmd(TBaseType.rrw_create, "editionable", "package", ESqlStatementType.sstplsql_createpackage); 078 addCmd(TBaseType.rrw_create, "editionable", "procedure", ESqlStatementType.sstplsql_createprocedure); 079 addCmd(TBaseType.rrw_create, "editionable", "trigger", ESqlStatementType.sstplsql_createtrigger); 080 addCmd(TBaseType.rrw_create, "editionable", "view", ESqlStatementType.sstoraclecreateview); 081 addCmd(TBaseType.rrw_create, "editioning", "view", ESqlStatementType.sstoraclecreateview); 082 addCmd(TBaseType.rrw_create, "database", "link", ESqlStatementType.sstoraclecreatedatabaselink); 083 addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstoraclecreatedatabase); 084 addCmd(TBaseType.rrw_create, "dimension", ESqlStatementType.sstoraclecreatedimension); 085 addCmd(TBaseType.rrw_create, "directory", ESqlStatementType.sstoraclecreatedirectory); 086 addCmd(TBaseType.rrw_create, "diskgroup", ESqlStatementType.sstoraclecreatediskgroup); 087 addCmd(TBaseType.rrw_create, "domain", ESqlStatementType.sstoraclecreatedomain); 088 addCmd(TBaseType.rrw_create, "duplicated", "table", ESqlStatementType.sstcreatetable); 089 addCmd(TBaseType.rrw_create, "force", "editionable", "editioning", "view", ESqlStatementType.sstoraclecreateview); 090 addCmd(TBaseType.rrw_create, "force", "editionable", "view", ESqlStatementType.sstoraclecreateview); 091 addCmd(TBaseType.rrw_create, "force", "editioning", "view", ESqlStatementType.sstoraclecreateview); 092 addCmd(TBaseType.rrw_create, "force", "noneditionable", "view", ESqlStatementType.sstoraclecreateview); 093 addCmd(TBaseType.rrw_create, "force", "view", ESqlStatementType.sstoraclecreateview); 094 addCmd(TBaseType.rrw_create, "force", "json", "relational", "duality", "view", ESqlStatementType.sstoraclecreatejsonrelationaldualityview); 095 addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstplsql_createfunction); 096 addCmd(TBaseType.rrw_create, "global", "temp", "table", ESqlStatementType.sstcreatetable); 097 addCmd(TBaseType.rrw_create, "global", "temporary", "table", ESqlStatementType.sstcreatetable); 098 addCmd(TBaseType.rrw_create, "local", "temp", "table", ESqlStatementType.sstcreatetable); 099 addCmd(TBaseType.rrw_create, "local", "temporary", "table", ESqlStatementType.sstcreatetable); 100 addCmd(TBaseType.rrw_create, "immutable", "table", ESqlStatementType.sstcreatetable); 101 addCmd(TBaseType.rrw_create, "index", ESqlStatementType.sstoraclecreateindex); 102 addCmd(TBaseType.rrw_create, "indextype", ESqlStatementType.sstoraclecreateindextype); 103 addCmd(TBaseType.rrw_create, "java", ESqlStatementType.sstoraclecreatejava); 104 addCmd(TBaseType.rrw_create, "json", "relational", "duality", "view", ESqlStatementType.sstoraclecreatejsonrelationaldualityview); 105 addCmd(TBaseType.rrw_create, "library", ESqlStatementType.sstoraclecreatelibrary); 106 addCmd(TBaseType.rrw_create, "mle", "module", ESqlStatementType.sstoraclecreatemlemodule); 107 addCmd(TBaseType.rrw_create, "materialized", "view", "log", ESqlStatementType.sstoraclecreatematerializedviewlog); 108 addCmd(TBaseType.rrw_create, "materialized", "view", ESqlStatementType.sstcreatematerializedview); 109 addCmd(TBaseType.rrw_create, "multivalue", "index", ESqlStatementType.sstoraclecreateindex); 110 addCmd(TBaseType.rrw_create, "no", "force", "editionable", "editioning", "view", ESqlStatementType.sstoraclecreateview); 111 addCmd(TBaseType.rrw_create, "no", "force", "editionable", "view", ESqlStatementType.sstoraclecreateview); 112 addCmd(TBaseType.rrw_create, "no", "force", "editioning", "view", ESqlStatementType.sstoraclecreateview); 113 addCmd(TBaseType.rrw_create, "no", "force", "noneditionable", "view", ESqlStatementType.sstoraclecreateview); 114 addCmd(TBaseType.rrw_create, "no", "force", "view", ESqlStatementType.sstoraclecreateview); 115 addCmd(TBaseType.rrw_create, "no", "force", "json", "relational", "duality", "view", ESqlStatementType.sstoraclecreatejsonrelationaldualityview); 116 addCmd(TBaseType.rrw_create, "noforce", "editionable", "editioning", "view", ESqlStatementType.sstoraclecreateview); 117 addCmd(TBaseType.rrw_create, "noforce", "editionable", "view", ESqlStatementType.sstoraclecreateview); 118 addCmd(TBaseType.rrw_create, "noforce", "editioning", "view", ESqlStatementType.sstoraclecreateview); 119 addCmd(TBaseType.rrw_create, "noforce", "noneditionable", "view", ESqlStatementType.sstoraclecreateview); 120 addCmd(TBaseType.rrw_create, "noforce", "view", ESqlStatementType.sstoraclecreateview); 121 addCmd(TBaseType.rrw_create, "noforce", "json", "relational", "duality", "view", ESqlStatementType.sstoraclecreatejsonrelationaldualityview); 122 addCmd(TBaseType.rrw_create, "noneditionable", "function", ESqlStatementType.sstplsql_createfunction); 123 addCmd(TBaseType.rrw_create, "noneditionable", "library", ESqlStatementType.sstoraclecreatelibrary); 124 addCmd(TBaseType.rrw_create, "noneditionable", "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 125 addCmd(TBaseType.rrw_create, "noneditionable", "package", ESqlStatementType.sstplsql_createpackage); 126 addCmd(TBaseType.rrw_create, "noneditionable", "procedure", ESqlStatementType.sstplsql_createprocedure); 127 addCmd(TBaseType.rrw_create, "noneditionable", "trigger", ESqlStatementType.sstplsql_createtrigger); 128 addCmd(TBaseType.rrw_create, "noneditionable", "view", ESqlStatementType.sstoraclecreateview); 129 addCmd(TBaseType.rrw_create, "operator", ESqlStatementType.sstoraclecreateoperator); 130 addCmd(TBaseType.rrw_create, "or", "replace", "context", ESqlStatementType.sstoraclecreatecontext); 131 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "editioning", "view", ESqlStatementType.sstoraclecreateview); 132 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "function", ESqlStatementType.sstplsql_createfunction); 133 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 134 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "package", ESqlStatementType.sstplsql_createpackage); 135 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "procedure", ESqlStatementType.sstplsql_createprocedure); 136 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "trigger", ESqlStatementType.sstplsql_createtrigger); 137 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "view", ESqlStatementType.sstoraclecreateview); 138 addCmd(TBaseType.rrw_create, "or", "replace", "editioning", "view", ESqlStatementType.sstoraclecreateview); 139 addCmd(TBaseType.rrw_create, "or", "replace", "directory", ESqlStatementType.sstoraclecreatedirectory); 140 addCmd(TBaseType.rrw_create, "or", "replace", "domain", ESqlStatementType.sstoraclecreatedomain); 141 addCmd(TBaseType.rrw_create, "or", "replace", "json", "relational", "duality", "view", ESqlStatementType.sstoraclecreatejsonrelationaldualityview); 142 addCmd(TBaseType.rrw_create, "or", "replace", "force", "json", "relational", "duality", "view", ESqlStatementType.sstoraclecreatejsonrelationaldualityview); 143 addCmd(TBaseType.rrw_create, "or", "replace", "noforce", "json", "relational", "duality", "view", ESqlStatementType.sstoraclecreatejsonrelationaldualityview); 144 addCmd(TBaseType.rrw_create, "or", "replace", "force", "view", ESqlStatementType.sstoraclecreateview); 145 addCmd(TBaseType.rrw_create, "or", "replace", "force", "editionable", "view", ESqlStatementType.sstoraclecreateview); 146 addCmd(TBaseType.rrw_create, "or", "replace", "force", "editionable", "editioning", "view", ESqlStatementType.sstoraclecreateview); 147 addCmd(TBaseType.rrw_create, "or", "replace", "force", "editioning", "view", ESqlStatementType.sstoraclecreateview); 148 addCmd(TBaseType.rrw_create, "or", "replace", "force", "noneditionable", "view", ESqlStatementType.sstoraclecreateview); 149 addCmd(TBaseType.rrw_create, "or", "replace", "function", ESqlStatementType.sstplsql_createfunction); 150 addCmd(TBaseType.rrw_create, "or", "replace", "editionable", "library", ESqlStatementType.sstoraclecreatelibrary); 151 addCmd(TBaseType.rrw_create, "or", "replace", "library", ESqlStatementType.sstoraclecreatelibrary); 152 addCmd(TBaseType.rrw_create, "or", "replace", "mle", "module", ESqlStatementType.sstoraclecreatemlemodule); 153 addCmd(TBaseType.rrw_create, "or", "replace", "no", "force", "editionable", "editioning", "view", ESqlStatementType.sstoraclecreateview); 154 addCmd(TBaseType.rrw_create, "or", "replace", "no", "force", "editionable", "view", ESqlStatementType.sstoraclecreateview); 155 addCmd(TBaseType.rrw_create, "or", "replace", "no", "force", "editioning", "view", ESqlStatementType.sstoraclecreateview); 156 addCmd(TBaseType.rrw_create, "or", "replace", "no", "force", "noneditionable", "view", ESqlStatementType.sstoraclecreateview); 157 addCmd(TBaseType.rrw_create, "or", "replace", "no", "force", "view", ESqlStatementType.sstoraclecreateview); 158 addCmd(TBaseType.rrw_create, "or", "replace", "noforce", "editionable", "editioning", "view", ESqlStatementType.sstoraclecreateview); 159 addCmd(TBaseType.rrw_create, "or", "replace", "noforce", "editionable", "view", ESqlStatementType.sstoraclecreateview); 160 addCmd(TBaseType.rrw_create, "or", "replace", "noforce", "editioning", "view", ESqlStatementType.sstoraclecreateview); 161 addCmd(TBaseType.rrw_create, "or", "replace", "noforce", "noneditionable", "view", ESqlStatementType.sstoraclecreateview); 162 addCmd(TBaseType.rrw_create, "or", "replace", "noforce", "view", ESqlStatementType.sstoraclecreateview); 163 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "library", ESqlStatementType.sstoraclecreatelibrary); 164 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "function", ESqlStatementType.sstplsql_createfunction); 165 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 166 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "package", ESqlStatementType.sstplsql_createpackage); 167 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "procedure", ESqlStatementType.sstplsql_createprocedure); 168 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "public", "synonym", ESqlStatementType.sstoraclecreatesynonym); 169 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "trigger", ESqlStatementType.sstplsql_createtrigger); 170 addCmd(TBaseType.rrw_create, "or", "replace", "noneditionable", "view", ESqlStatementType.sstoraclecreateview); 171 addCmd(TBaseType.rrw_create, "or", "replace", "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 172 addCmd(TBaseType.rrw_create, "or", "replace", "package", ESqlStatementType.sstplsql_createpackage); 173 addCmd(TBaseType.rrw_create, "or", "replace", "procedure", ESqlStatementType.sstplsql_createprocedure); 174 addCmd(TBaseType.rrw_create, "or", "replace", "property", "graph", ESqlStatementType.sstoraclecreatepropertygraph); 175 addCmd(TBaseType.rrw_create, "or", "replace", "public", "synonym", ESqlStatementType.sstoraclecreatesynonym); 176 addCmd(TBaseType.rrw_create, "or", "replace", "synonym", ESqlStatementType.sstoraclecreatesynonym); 177 addCmd(TBaseType.rrw_create, "or", "replace", "trigger", ESqlStatementType.sstplsql_createtrigger); 178 addCmd(TBaseType.rrw_create, "or", "replace", "type", "body", ESqlStatementType.sstplsql_createtypebody); 179 addCmd(TBaseType.rrw_create, "or", "replace", "type", ESqlStatementType.sstplsql_createtype_placeholder); 180 addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstoraclecreateview); 181 addCmd(TBaseType.rrw_create, "outline", ESqlStatementType.sstoraclecreateoutline); 182 addCmd(TBaseType.rrw_create, "private", "temporary", "table", ESqlStatementType.sstcreatetable); 183 addCmd(TBaseType.rrw_create, "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 184 addCmd(TBaseType.rrw_create, "package", ESqlStatementType.sstplsql_createpackage); 185 addCmd(TBaseType.rrw_create, "pfile", ESqlStatementType.sstoraclecreatepfile); 186 addCmd(TBaseType.rrw_create, "procedure", ESqlStatementType.sstplsql_createprocedure); 187 addCmd(TBaseType.rrw_create, "profile", ESqlStatementType.sstoraclecreateprofile); 188 addCmd(TBaseType.rrw_create, "property", "graph", ESqlStatementType.sstoraclecreatepropertygraph); 189 addCmd(TBaseType.rrw_create, "public", "database", "link", ESqlStatementType.sstoraclecreatedatabaselink); 190 addCmd(TBaseType.rrw_create, "public", "synonym", ESqlStatementType.sstoraclecreatesynonym); 191 addCmd(TBaseType.rrw_create, "resotre", "point", ESqlStatementType.sstoraclecreaterestorepoint); 192 addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstoraclecreaterole); 193 addCmd(TBaseType.rrw_create, "rollback", "segment", ESqlStatementType.sstoraclecreaterollbacksegment); 194 addCmd(TBaseType.rrw_create, "shared", "database", "link", ESqlStatementType.sstoraclecreatedatabaselink); 195 addCmd(TBaseType.rrw_create, "shared", "public", "database", "link", ESqlStatementType.sstoraclecreatedatabaselink); 196 addCmd(TBaseType.rrw_create, "sharded", "table", ESqlStatementType.sstcreatetable); 197 addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstoraclecreateschema); 198 addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstoraclecreatesequence); 199 addCmd(TBaseType.rrw_create, "smallfile", "tablespace", ESqlStatementType.sstoraclecreatetablespace); 200 addCmd(TBaseType.rrw_create, "spfile", ESqlStatementType.sstoraclecreatespfile); 201 addCmd(TBaseType.rrw_create, "synonym", ESqlStatementType.sstoraclecreatesynonym); 202 addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable); 203 addCmd(TBaseType.rrw_create, "tablespace", ESqlStatementType.sstoraclecreatetablespace); 204 addCmd(TBaseType.rrw_create, "temporary", "tablespace", ESqlStatementType.sstoraclecreatetablespace); 205 addCmd(TBaseType.rrw_create, "trigger", ESqlStatementType.sstplsql_createtrigger); 206 addCmd(TBaseType.rrw_create, "type", "body", ESqlStatementType.sstplsql_createtypebody); 207 addCmd(TBaseType.rrw_create, "type", ESqlStatementType.sstplsql_createtype_placeholder); 208 addCmd(TBaseType.rrw_create, "undo", "tablespace", ESqlStatementType.sstoraclecreatetablespace); 209 addCmd(TBaseType.rrw_create, "unique", "index", ESqlStatementType.sstoraclecreateindex); 210 addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstoraclecreateuser); 211 addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstoraclecreateview); 212 addCmd(TBaseType.rrw_custom, "package", "body", ESqlStatementType.sstoraclecreatepackagebody); 213 addCmd(TBaseType.rrw_custom, "package", ESqlStatementType.sstplsql_createpackage); 214 addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete); 215 addCmd(TBaseType.rrw_disassociate, "statistics", ESqlStatementType.sstoracledisassociatestatistics); 216 addCmd(TBaseType.rrw_drop, "cluster", ESqlStatementType.sstoracledropcluster); 217 addCmd(TBaseType.rrw_drop, "context", ESqlStatementType.sstoracledropcontext); 218 addCmd(TBaseType.rrw_drop, "database", "link", ESqlStatementType.sstoracledropdatabaselink); 219 addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstoracledropdatabase); 220 addCmd(TBaseType.rrw_drop, "dimension", ESqlStatementType.sstoracledropdimension); 221 addCmd(TBaseType.rrw_drop, "directory", ESqlStatementType.sstoracledropdirectory); 222 addCmd(TBaseType.rrw_drop, "diskgroup", ESqlStatementType.sstoracledropdiskgroup); 223 addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstoracledropfunction); 224 addCmd(TBaseType.rrw_drop, "index", ESqlStatementType.sstoracledropindex); 225 addCmd(TBaseType.rrw_drop, "indextype", ESqlStatementType.sstoracledropindextype); 226 addCmd(TBaseType.rrw_drop, "java", ESqlStatementType.sstoracledropjava); 227 addCmd(TBaseType.rrw_drop, "library", ESqlStatementType.sstoracledroplibrary); 228 addCmd(TBaseType.rrw_drop, "materialized", "view", "log", ESqlStatementType.sstoracledropmaterializedviewlog); 229 addCmd(TBaseType.rrw_drop, "materialized", "view", ESqlStatementType.sstoracledropmaterializedview); 230 addCmd(TBaseType.rrw_drop, "operator", ESqlStatementType.sstoracledropoperator); 231 addCmd(TBaseType.rrw_drop, "outline", ESqlStatementType.sstoracledropoutline); 232 addCmd(TBaseType.rrw_drop, "package", ESqlStatementType.sstoracledroppackage); 233 addCmd(TBaseType.rrw_drop, "procedure", ESqlStatementType.sstoracledropprocedure); 234 addCmd(TBaseType.rrw_drop, "profile", ESqlStatementType.sstoracledropprofile); 235 addCmd(TBaseType.rrw_drop, "public", "database", "link", ESqlStatementType.sstoracledropdatabaselink); 236 addCmd(TBaseType.rrw_drop, "public", "synonym", ESqlStatementType.sstoracledropsynonym); 237 addCmd(TBaseType.rrw_drop, "restore", "point", ESqlStatementType.sstoracledroprestorepoint); 238 addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstoracledroprole); 239 addCmd(TBaseType.rrw_drop, "rollback", "segment", ESqlStatementType.sstoracledroprollbacksegment); 240 addCmd(TBaseType.rrw_drop, "sequence", ESqlStatementType.sstoracledropsequence); 241 addCmd(TBaseType.rrw_drop, "synonym", ESqlStatementType.sstoracledropsynonym); 242 addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstoracledroptable); 243 addCmd(TBaseType.rrw_drop, "tablespace", ESqlStatementType.sstoracledroptablespace); 244 addCmd(TBaseType.rrw_drop, "trigger", ESqlStatementType.sstoracledroptrigger); 245 addCmd(TBaseType.rrw_drop, "type", "body", ESqlStatementType.sstoracledroptypebody); 246 addCmd(TBaseType.rrw_drop, "type", ESqlStatementType.sstoracledroptype); 247 addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstoracledropuser); 248 addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstoracledropview); 249 addCmd(TBaseType.rrw_execute, "immediate", ESqlStatementType.sstplsql_execimmestmt); 250 addCmd(TBaseType.rrw_execute, ESqlStatementType.sstoracleexecuteprocedure); 251 addCmd(TBaseType.rrw_explain, "plan", ESqlStatementType.sstExplain); 252 addCmd(TBaseType.rrw_flashback, "database", ESqlStatementType.sstoracleflashbackdatabase); 253 addCmd(TBaseType.rrw_flashback, "table", ESqlStatementType.sstoracleflashbacktable); 254 addCmd(TBaseType.rrw_grant, ESqlStatementType.sstoraclegrant); 255 addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert); 256 addCmd(TBaseType.rrw_lock, "table", ESqlStatementType.sstoraclelocktable); 257 addCmd(TBaseType.rrw_merge, ESqlStatementType.sstmerge); 258 addCmd(TBaseType.rrw_noaudit, ESqlStatementType.sstoraclenoaudit); 259 addCmd(TBaseType.rrw_purge, ESqlStatementType.sstoraclepurge); 260 addCmd(TBaseType.rrw_rename, ESqlStatementType.sstoraclerename); 261 addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstoraclerevoke); 262 addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstoraclerollback); 263 addCmd(TBaseType.rrw_savepoint, ESqlStatementType.sstoraclesavepoint); 264 addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect); 265 addCmd(TBaseType.rrw_set, "constraint", ESqlStatementType.sstoraclesetconstraint); 266 addCmd(TBaseType.rrw_set, "constraints", ESqlStatementType.sstoraclesetconstraint); 267 addCmd(TBaseType.rrw_set, "role", ESqlStatementType.sstoraclesetrole); 268 addCmd(TBaseType.rrw_set, "transaction", ESqlStatementType.sstoraclesettransaction); 269 addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstTruncate); 270 addCmd(TBaseType.rrw_type2, ESqlStatementType.sstplsql_createtype_placeholder); 271 addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate); 272 } 273 274 @Override 275 public TCustomSqlStatement issql(TSourceToken token, EFindSqlStateType state, TCustomSqlStatement currentStatement) { 276 TCustomSqlStatement ret = null; 277 278 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 279 280 if ( (token.tokencode == TBaseType.cmtdoublehyphen) 281 || (token.tokencode == TBaseType.cmtslashstar) 282 || (token.tokencode == TBaseType.lexspace) 283 || (token.tokencode == TBaseType.lexnewline) 284 || (token.tokentype == ETokenType.ttsemicolon) ) 285 { 286 return null; 287 } 288 289 int lcpos = token.posinlist; 290 TSourceTokenList lcsourcetokenlist = token.container; 291 TCustomSqlStatement lccurrentsqlstatement = currentStatement; 292 293 //subquery after semicolon or at first line 294 if ( (state == EFindSqlStateType.stnormal) && (token.tokentype == ETokenType.ttleftparenthesis) ) // ( 295 { 296 int k = lcsourcetokenlist.solidtokenafterpos(lcpos,TBaseType.rrw_select,1,"("); 297 if ( k >0 ) 298 { 299 ret = new TSelectSqlStatement(this.vendor); 300 } 301 302 return ret; 303 } 304 305 //cte 306 if ( (state == EFindSqlStateType.stnormal) && (token.tokencode == TBaseType.rrw_with) ) 307 { 308 ret = findcte(token,this.vendor); 309 if ( (ret != null) ) return ret; 310 } 311 312 gnewsqlstatementtype = getStatementTypeForToken(token); 313 314 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 315 switch (gnewsqlstatementtype) { // 316 case sstinvalid: 317 { 318 ret = null; 319 320 if ( state == EFindSqlStateType.stnormal ) 321 { 322 if ( token.tokencode == TBaseType.label_begin ) 323 { 324 ret = new TCommonBlock(this.vendor); 325 gnewsqlstatementtype = ret.sqlstatementtype; 326 } 327 else if ( token.tokencode == TBaseType.rrw_declare ) 328 { 329 ret = new TCommonBlock(this.vendor); 330 gnewsqlstatementtype = ret.sqlstatementtype; 331 } 332 else if ( token.tokencode == TBaseType.rrw_begin ) 333 { 334 ret = new TCommonBlock(this.vendor); 335 gnewsqlstatementtype = ret.sqlstatementtype; 336 } 337 else if ( token.tokencode == TBaseType.rrw_procedure ) 338 { 339 ret = new TPlsqlCreateProcedure(this.vendor); 340 // ret.sqlstatementtype = ESqlStatementType.sstplsql_createprocedure; 341 gnewsqlstatementtype = ret.sqlstatementtype; 342 } 343 else if ( token.tokencode == TBaseType.rrw_function ) 344 { 345 ret = new TPlsqlCreateFunction(this.vendor); 346 // ret.sqlstatementtype = ESqlStatementType.sstplsql_createfunction; 347 gnewsqlstatementtype = ret.sqlstatementtype; 348 } 349 else if ( token.tokencode == TBaseType.rrw_package ) 350 { 351 ret = new TPlsqlCreatePackage(this.vendor); 352 // ret.sqlstatementtype = ESqlStatementType.sstplsql_createpackage; 353 gnewsqlstatementtype = ret.sqlstatementtype; 354 } 355 } 356 break; 357 } 358 case sstselect: 359 { 360 boolean lcisnewsql = true; 361 362 if ( state != EFindSqlStateType.stnormal ) 363 { 364 // lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 365 if ( (lcprevsolidtoken != null) ) 366 { 367 if ( lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 368 lcisnewsql = false; //subquery 369 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_union ) 370 lcisnewsql = false; 371 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_intersect ) 372 lcisnewsql = false; 373 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_minus ) 374 lcisnewsql = false; 375 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_except ) 376 lcisnewsql = false; 377 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_return ) 378 lcisnewsql = false; 379 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_as ) 380 { 381 if ( lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable ) 382 lcisnewsql = false; 383 if ( lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview ) 384 lcisnewsql = false; 385 } 386 387 if ( lcisnewsql && ( lcprevsolidtoken.tokencode == TBaseType.rrw_all) ) 388 { 389 TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 390 if ( (lcpprevsolidtoken != null) ) 391 { 392 if ( lcpprevsolidtoken.tokencode == TBaseType.rrw_union ) 393 lcisnewsql = false; 394 } 395 } 396 397 } 398 399 400 if ( (lccurrentsqlstatement != null) ) 401 { 402 switch (lccurrentsqlstatement.sqlstatementtype){ 403 case sstinsert: 404 lcisnewsql = false; 405 break; 406 case sstcreatetable: 407 case sstcreateview: 408 lcisnewsql = false; 409 break; 410 } 411 } 412 413 } 414 415 if ( lcisnewsql ) 416 ret = new TSelectSqlStatement(this.vendor); 417 418 break; 419 } 420 case sstinsert: 421 { 422 boolean lcisnewsql = true; 423 if ( state != EFindSqlStateType.stnormal ) 424 { 425 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 426 if ( (lcprevsolidtoken != null) ) 427 { 428 if ( lcprevsolidtoken.toString().equalsIgnoreCase("AFTER") ) 429 lcisnewsql = false; 430 } 431 if ( (lccurrentsqlstatement != null) ) 432 { 433 434 } 435 } 436 437 if ( lcisnewsql ) 438 ret = new TInsertSqlStatement(this.vendor); 439 440 break; 441 } 442 case sstupdate: 443 { 444 boolean lcisnewsql = true; 445 if ( state != EFindSqlStateType.stnormal ) 446 { 447 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 448 if ( (lcprevsolidtoken != null) ) 449 { // 450 if ( lcprevsolidtoken.tokencode == TBaseType.rrw_on ) 451 lcisnewsql = false; 452 else if ( lcprevsolidtoken.tokencode == TBaseType.rrw_for ) 453 lcisnewsql = false; 454 } 455 456 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos,1,false); 457 if ( (lcnextsolidtoken != null) ) 458 { 459 if ( lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) 460 { 461 int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist,TBaseType.rrw_select,1,"("); 462 if ( k == 0 ) lcisnewsql = false; 463 } 464 else if ( lcnextsolidtoken.toString().equalsIgnoreCase("BLOCK") ) 465 lcisnewsql = false; 466 } 467 468 469 if ( (lccurrentsqlstatement != null) ) 470 { 471 } 472 } 473 474 if ( lcisnewsql ) 475 { 476 ret = new TUpdateSqlStatement(this.vendor); 477 ret.dummytag = 1; // means set clause in update is not found yet, used to seperate set clause from set statement 478 } 479 break; 480 } 481 case sstdelete: 482 { 483 boolean lcisnewsql = true; 484 485 if ( state != EFindSqlStateType.stnormal ) 486 { 487 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 488 if ( (lcprevsolidtoken != null) ) 489 { 490 if ( lcprevsolidtoken.tokencode == TBaseType.rrw_on ) 491 lcisnewsql = false; 492 else if ( lcprevsolidtoken.toString().equalsIgnoreCase("NO") ) 493 lcisnewsql = false; 494 } 495 496 if ( (lccurrentsqlstatement != null) ) 497 { 498 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos,1,false); 499 if ( (lcnextsolidtoken != null) ){ 500 if (lcnextsolidtoken.tokencode == TBaseType.rrw_oracle_rows){ 501 lcisnewsql = false; 502 } 503 } 504 } 505 } 506 507 if ( lcisnewsql ) 508 ret = new TDeleteSqlStatement(this.vendor); 509 510 break; 511 } 512 case sstmerge: 513 { 514 ret = new TMergeSqlStatement(this.vendor); 515 ret.sqlstatementtype = gnewsqlstatementtype; 516 break; 517 } 518 case sstoraclecommit: 519 { 520 521 boolean lcisnewsql = true; 522 if ( state != EFindSqlStateType.stnormal ) 523 { 524 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 525 if ( (lcprevsolidtoken != null) ) 526 { // 527 if ( lcprevsolidtoken.tokencode == TBaseType.rrw_on ) 528 lcisnewsql = false; 529 } 530 } 531 532 if (lcisnewsql){ 533 ret = new TCommitStmt(this.vendor); 534 ret.sqlstatementtype = gnewsqlstatementtype; 535 } 536 537 break; 538 } 539 case sstoraclerollback: 540 { 541 ret = new TUnknownSqlStatement(this.vendor); 542 ret.sqlstatementtype = gnewsqlstatementtype; 543 break; 544 } 545 case sstoraclesavepoint: 546 { 547 ret = new TUnknownSqlStatement(this.vendor); 548 ret.sqlstatementtype = gnewsqlstatementtype; 549 break; 550 } 551 case sstoraclerevoke: 552 { 553 ret = new TUnknownSqlStatement(this.vendor); 554 ret.sqlstatementtype = gnewsqlstatementtype; 555 break; 556 } 557 case sstoraclegrant: 558 { 559 ret = new TUnknownSqlStatement(this.vendor); 560 ret.sqlstatementtype = gnewsqlstatementtype; 561 break; 562 } 563 case sstoracleanalyze: 564 { 565 ret = new TUnknownSqlStatement(this.vendor); 566 ret.sqlstatementtype = gnewsqlstatementtype; 567 break; 568 } 569 case sstTruncate: 570 { 571 ret = new TTruncateStatement(this.vendor); 572 ret.sqlstatementtype = gnewsqlstatementtype; 573 break; 574 } 575 case sstcreatetable: 576 { 577 ret = new TCreateTableSqlStatement(this.vendor); 578 break; 579 } 580 case sstoraclecreateview: 581 { 582 ret = new TCreateViewSqlStatement(this.vendor); 583 break; 584 } 585 case sstcreatematerializedview:{ 586 ret = new TCreateMaterializedSqlStatement(this.vendor); 587 break; 588 } 589 case sstoraclecreatematerializedviewlog:{ 590 ret = new TCreateMaterializedViewLogSqlStatement(this.vendor); 591 break; 592 } 593 case sstoraclecreateindex: 594 { 595 ret = new TCreateIndexSqlStatement(this.vendor); 596 break; 597 } 598 case sstoraclecreatedatabase: 599 { 600 ret = new TCreateDatabaseSqlStatement(this.vendor); 601 break; 602 } 603 case sstoracledroptable: 604 { 605 ret = new TDropTableSqlStatement(this.vendor); 606 break; 607 } 608 case sstoracledropview: 609 { 610 ret = new TDropViewSqlStatement(this.vendor); 611 break; 612 } 613 case sstoracledropindex: 614 { 615 ret = new TDropIndexSqlStatement(this.vendor); 616 break; 617 } 618 case sstaltertable: 619 { 620 ret = new TAlterTableStatement(this.vendor); 621 break; 622 } 623 case sstoraclealtersession: 624 { 625 ret = new TAlterSessionStatement(this.vendor); 626 break; 627 } 628 case sstplsql_createprocedure: 629 { 630 ret = new TPlsqlCreateProcedure(this.vendor); 631 ret.sqlstatementtype = gnewsqlstatementtype; 632 // System.out.println(gnewsqlstatementtype); 633 break; 634 } 635 case sstplsql_createfunction: 636 { 637 ret = new TPlsqlCreateFunction(this.vendor); 638 ret.sqlstatementtype = gnewsqlstatementtype; 639 // System.out.println(gnewsqlstatementtype); 640 break; 641 } 642 case sstplsql_createpackage: 643 { 644 ret = new TPlsqlCreatePackage(this.vendor); 645 ret.sqlstatementtype = gnewsqlstatementtype; 646 // System.out.println(gnewsqlstatementtype); 647 break; 648 } 649 case sstplsql_createtrigger: 650 { 651 ret = new TPlsqlCreateTrigger(this.vendor); 652 ret.sqlstatementtype = gnewsqlstatementtype; 653 // System.out.println(gnewsqlstatementtype); 654 break; 655 } 656 case sstplsql_execimmestmt: 657 { 658 ret = new TExecImmeStmt(this.vendor); 659 // ret.sqlstatementtype = gnewsqlstatementtype; 660 // System.out.println(gnewsqlstatementtype); 661 break; 662 } 663 case sstoraclecreatepackagebody: 664 { 665 ret = new TPlsqlCreatePackage(this.vendor); 666 ret.sqlstatementtype = ESqlStatementType.sstplsql_createpackage; 667 break; 668 } 669 case sstplsql_createtype_placeholder: 670 { 671 ret = new TPlsqlCreateType_Placeholder(this.vendor); 672 ret.sqlstatementtype = gnewsqlstatementtype; 673 // System.out.println(gnewsqlstatementtype); 674 break; 675 } 676 case sstplsql_createtypebody: 677 { 678 ret = new TPlsqlCreateTypeBody(this.vendor); 679 ret.sqlstatementtype = gnewsqlstatementtype; 680 break; 681 } 682 case sstCommentOn: 683 { 684 ret = new TCommentOnSqlStmt(this.vendor); 685 break; 686 } 687 case sstoraclecreatesequence: 688 { 689 ret = new TCreateSequenceStmt(this.vendor); 690 break; 691 } 692 case sstoraclecreatesynonym: 693 { 694 ret = new TCreateSynonymStmt(this.vendor); 695 break; 696 } 697 case sstoraclecreatedirectory: 698 { 699 ret = new TOracleCreateDirectoryStmt(this.vendor); 700 break; 701 } 702 case sstoracleexecuteprocedure: 703 { 704 ret = new TOracleExecuteProcedure(this.vendor); 705 break; 706 } 707 case sstExplain: 708 { 709 ret = new TExplainPlan(this.vendor); 710 break; 711 } 712 case sstoraclecreatelibrary: 713 ret = new TOracleCreateLibraryStmt(this.vendor); 714 break; 715 case sstaltertrigger: 716 ret = new TAlterTriggerStmt(this.vendor); 717 break; 718 case sstoracledropsequence: 719 ret = new TDropSequenceStmt(this.vendor); 720 break; 721 case sstoraclecall: 722 ret = new TCallStatement(this.vendor); 723 break; 724 case sstoraclealterview: 725 ret = new TAlterViewStatement(this.vendor); 726 break; 727 case sstoracledropsynonym: 728 ret = new TDropSynonymStmt(this.vendor); 729 break; 730 case sstoracledropdatabaselink: 731 ret = new TDropDatabaseLinkStmt(this.vendor); 732 break; 733 case sstoraclecreatedatabaselink: 734 ret = new TCreateDatabaseLinkStmt(this.vendor); 735 break; 736 case sstoracledropmaterializedview: 737 ret = new TDropMaterializedViewStmt(this.vendor); 738 break; 739 case sstoracledropmaterializedviewlog: 740 ret = new TDropMaterializedViewLogStmt(this.vendor); 741 break; 742 case sstoraclerename: 743 ret = new TRenameStmt(this.vendor); 744 break; 745 case sstoracledropprocedure: 746 ret = new TDropProcedureStmt(this.vendor); 747 break; 748 case sstAlterMaterializedView: 749 ret = new TAlterMaterializedViewStmt(this.vendor); 750 break; 751 case sstoracledroptrigger: 752 ret = new TDropTriggerSqlStatement(this.vendor); 753 break; 754 case sstoracledropfunction: 755 ret = new TDropFunctionStmt(this.vendor); 756 break; 757 case sstoraclealterindex: 758 ret = new TAlterIndexStmt(this.vendor); 759 break; 760 case sstoraclealtersequence: 761 ret = new TAlterSequenceStatement(this.vendor); 762 break; 763 case sstoraclealtertype: 764 ret = new TAlterTypeStatement(this.vendor); 765 break; 766 case sstAlterLibrary: 767 ret = new TAlterLibraryStmt(this.vendor); 768 break; 769 default: 770 { 771 ret = new TUnknownSqlStatement(this.vendor); 772 ret.sqlstatementtype = gnewsqlstatementtype; 773 break; 774 } 775 } // case 776 777 return ret; 778 } 779 780 private TCustomSqlStatement findcte(TSourceToken ptoken, EDbVendor pdbvendor){ 781 TCustomSqlStatement ret = null; 782 TSourceToken lctoken = null; 783 int lcnested = 0,k,j; 784 boolean inXmlNamespaces = false; 785 boolean isXmlNamespaces = false; 786 787 int lcpos = ptoken.posinlist; 788 TSourceTokenList lcsourcetokenlist = ptoken.container; 789 790 // Oracle 12c WITH FUNCTION/PROCEDURE support - handle inline PL/SQL definitions 791 // Pattern: WITH FUNCTION ... END; [FUNCTION ... END;]* SELECT ... 792 // or: WITH FUNCTION ... END; [FUNCTION ... END;]* cte_name AS (...) SELECT ... 793 boolean hasWithPlsql = false; 794 for (int i = lcpos + 1; i < lcsourcetokenlist.size(); i++) { 795 lctoken = lcsourcetokenlist.get(i); 796 if (lctoken.isnonsolidtoken()) continue; 797 // Check if first solid token after WITH is FUNCTION or PROCEDURE 798 if (lctoken.tokencode == TBaseType.rrw_function || lctoken.tokencode == TBaseType.rrw_procedure) { 799 hasWithPlsql = true; 800 } 801 break; 802 } 803 804 if (hasWithPlsql) { 805 // Skip past all PL/SQL function/procedure definitions 806 // Each definition ends with END; and may be followed by more FUNCTION/PROCEDURE or SELECT 807 int beginEndNesting = 0; 808 boolean inPlsqlDef = false; 809 boolean debugWithPlsql = false; // Set to true for debugging 810 if (debugWithPlsql) System.out.println("DEBUG: hasWithPlsql=true, starting loop at " + (lcpos+1)); 811 for (int i = lcpos + 1; i < lcsourcetokenlist.size(); i++) { 812 lctoken = lcsourcetokenlist.get(i); 813 if (lctoken.isnonsolidtoken()) continue; 814 if (debugWithPlsql) System.out.println("DEBUG: i=" + i + " token=" + lctoken.toString() + " code=" + lctoken.tokencode + " inPlsqlDef=" + inPlsqlDef + " nesting=" + beginEndNesting); 815 816 if (lctoken.tokencode == TBaseType.rrw_function || lctoken.tokencode == TBaseType.rrw_procedure) { 817 inPlsqlDef = true; 818 if (debugWithPlsql) System.out.println("DEBUG: Found FUNCTION/PROCEDURE, inPlsqlDef=true"); 819 continue; 820 } 821 822 if (inPlsqlDef) { 823 if (lctoken.tokencode == TBaseType.rrw_begin) { 824 beginEndNesting++; 825 if (debugWithPlsql) System.out.println("DEBUG: Found BEGIN, nesting=" + beginEndNesting); 826 } else if (lctoken.tokencode == TBaseType.rrw_end) { 827 beginEndNesting--; 828 if (debugWithPlsql) System.out.println("DEBUG: Found END, nesting=" + beginEndNesting); 829 if (beginEndNesting <= 0) { 830 // Look for semicolon after END 831 for (int m = i + 1; m < lcsourcetokenlist.size(); m++) { 832 TSourceToken nextToken = lcsourcetokenlist.get(m); 833 if (nextToken.isnonsolidtoken()) continue; 834 if (nextToken.tokentype == ETokenType.ttsemicolon) { 835 if (debugWithPlsql) System.out.println("DEBUG: Found ; after END at " + m + ", setting inPlsqlDef=false"); 836 i = m; // Continue from after the semicolon 837 inPlsqlDef = false; 838 beginEndNesting = 0; 839 } 840 break; 841 } 842 } 843 } 844 continue; 845 } 846 847 // Not in PL/SQL definition - check for SELECT or CTE 848 if (lctoken.tokencode == TBaseType.rrw_select) { 849 if (debugWithPlsql) System.out.println("DEBUG: Found SELECT at " + i + ", returning TSelectSqlStatement"); 850 ret = new TSelectSqlStatement(pdbvendor); 851 ret.isctequery = true; 852 gnewsqlstatementtype = ESqlStatementType.sstselect; 853 // DON'T mark tokens as ignored - let YACC parser handle the full statement 854 // The WITH FUNCTION ... part is part of the statement, not a separate block 855 return ret; 856 } 857 858 // Could be CTE identifier followed by AS 859 if (lctoken.tokentype == ETokenType.ttidentifier) { 860 if (debugWithPlsql) System.out.println("DEBUG: Found identifier, checking for CTE"); 861 // Look for AS keyword after identifier - this is a CTE definition 862 for (int m = i + 1; m < lcsourcetokenlist.size(); m++) { 863 TSourceToken nextToken = lcsourcetokenlist.get(m); 864 if (nextToken.isnonsolidtoken()) continue; 865 if (nextToken.tokencode == TBaseType.rrw_as) { 866 // Found CTE - continue with normal CTE processing from this point 867 if (debugWithPlsql) System.out.println("DEBUG: Found CTE pattern, resetting lcpos"); 868 lcpos = i - 1; // Reset to process from CTE identifier 869 } 870 break; 871 } 872 break; // Exit the WITH PLSQL handling and continue normal processing 873 } 874 } 875 if (debugWithPlsql) System.out.println("DEBUG: Exiting hasWithPlsql block, ret=" + ret); 876 } 877 878 for (int i = lcpos + 1; i < lcsourcetokenlist.size();i++) // iterate 879 { 880 lctoken = lcsourcetokenlist.get(i); 881// if (lctoken.tokencode == TBaseType.rrw_postgresql_recursive){ 882// continue; 883// } 884 if (lctoken.tokencode == TBaseType.rrw_xmlnamespaces){ 885 inXmlNamespaces = true; 886 lcnested = 0; 887 continue; 888 } 889 if (inXmlNamespaces) { 890 if ( lctoken.tokentype == ETokenType.ttleftparenthesis) lcnested++; 891 if ( lctoken.tokentype == ETokenType.ttrightparenthesis) { 892 lcnested--; 893 if (lcnested == 0) { 894 inXmlNamespaces = false; 895 isXmlNamespaces = true; 896 } 897 } 898 continue; 899 } 900 if (( lctoken.tokencode == TBaseType.rrw_as ) || isXmlNamespaces) 901 { 902 lcnested = 0; 903 int startPos = i+1; 904 if (isXmlNamespaces) startPos = i; 905 for ( j = startPos; j < lcsourcetokenlist.size();j++) 906 { 907 lctoken = lcsourcetokenlist.get(j); 908 if (lctoken.isnonsolidtoken() ) continue; 909 if ( lctoken.tokentype == ETokenType.ttleftparenthesis) lcnested++; 910 if ( lctoken.tokentype == ETokenType.ttrightparenthesis) lcnested--; 911 912 913 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_delete) ) 914 { 915 ret = new TDeleteSqlStatement(pdbvendor); 916 ret.isctequery = true; 917 gnewsqlstatementtype = ESqlStatementType.sstdelete; 918 break; 919 } 920 921 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_merge) ) 922 { 923 ret = new TMergeSqlStatement(pdbvendor); 924 ret.isctequery = true; 925 gnewsqlstatementtype = ESqlStatementType.sstmerge; 926 break; 927 } 928 929 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_insert) ) 930 { 931 ret = new TInsertSqlStatement(pdbvendor); 932 ret.isctequery = true; 933 gnewsqlstatementtype = ESqlStatementType.sstinsert; 934 ret.dummytag = 1; // select stmt in insert is permitted 935 936 for ( k = lctoken.posinlist + 1; k < lcsourcetokenlist.size();k++) // iterate 937 { 938 if ( lcsourcetokenlist.get(k).isnonsolidtoken() ) continue; 939 if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_values ) break; 940 if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_go ) break; 941 if ( lcsourcetokenlist.get(k).tokentype == ETokenType.ttsemicolon ) break; 942 if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_select ) break; 943 if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_execute ) break; 944 if ( lcsourcetokenlist.get(k).tokencode == TBaseType.rrw_exec ) break; 945 } // for 946 if ( k > lcsourcetokenlist.size() - 1 ) 947 k = lcsourcetokenlist.size() - 1; 948 949 for (int m = lctoken.posinlist + 1; m <= k; m++) // iterate 950 { 951 lcsourcetokenlist.get(m).tokenstatus = ETokenStatus.tsignoredbygetrawstatement; 952 } // for 953 954 break; 955 } 956 957 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_values) &&(pdbvendor == EDbVendor.dbvpostgresql) ) 958 { 959 ret = new TSelectSqlStatement(pdbvendor); 960 ret.isctequery = true; 961 gnewsqlstatementtype = ESqlStatementType.sstselect; 962 break; 963 } 964 965 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_select) ) 966 { 967 ret = new TSelectSqlStatement(pdbvendor); 968 ret.isctequery = true; 969 gnewsqlstatementtype = ESqlStatementType.sstselect; 970 break; 971 } 972 973 if ( (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_update) ) 974 { 975 ret = new TUpdateSqlStatement(pdbvendor); 976 ret.isctequery = true; 977 ret.dummytag = 1; // means set clause in update is not found yet, used to seperate set clause from set statement 978 gnewsqlstatementtype = ESqlStatementType.sstupdate; 979 break; 980 } 981 982 if ( (pdbvendor == EDbVendor.dbvhive) && (lcnested == 0) && (lctoken.tokencode == TBaseType.rrw_from) ) 983 { 984 TSourceToken cmdToken = lctoken.searchToken(TBaseType.rrw_insert,3); 985 if (cmdToken != null){ 986 ret = new TInsertSqlStatement(pdbvendor); 987 ret.isctequery = true; 988 gnewsqlstatementtype = ESqlStatementType.sstinsert; 989 990 }else{ 991 ret = new TSelectSqlStatement(pdbvendor); 992 ret.isctequery = true; 993 gnewsqlstatementtype = ESqlStatementType.ssthiveFromQuery; 994 } 995 break; 996 } 997 998 999 } // for 1000 1001 if ( (ret != null) ) 1002 { 1003 for (k = lcpos + 1; k <= j;k++) // iterate 1004 { 1005 lcsourcetokenlist.get(k).tokenstatus = ETokenStatus.tsignoredbygetrawstatement; 1006 } // for 1007 break; 1008 } 1009 1010 } 1011 } 1012 1013 return ret; 1014 } 1015}