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