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