001package gudusoft.gsqlparser.sqlcmds;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.stmt.*;
005import gudusoft.gsqlparser.stmt.snowflake.*;
006import gudusoft.gsqlparser.stmt.oracle.TPlsqlCreateFunction;
007import gudusoft.gsqlparser.stmt.oracle.TPlsqlCreatePackage;
008import gudusoft.gsqlparser.stmt.oracle.TPlsqlCreateProcedure;
009
010/**
011 * Snowflake SQL command resolver.
012 * Extracted from monolithic TSqlCmds for lazy loading.
013 *
014 * @since 3.1.0.9
015 */
016public class TSqlCmdsSnowflake extends AbstractSqlCmds {
017
018    public TSqlCmdsSnowflake() {
019        super(EDbVendor.dbvsnowflake);
020    }
021
022    @Override
023    protected void initializeCommands() {
024        // Commands must be in order: longer patterns BEFORE shorter patterns with same prefix
025
026        // ALTER commands
027        addCmd(TBaseType.rrw_alter, "external", "table", ESqlStatementType.sstaltertable);
028        addCmd(TBaseType.rrw_alter, "account", ESqlStatementType.sstAlterAccount);
029        addCmd(TBaseType.rrw_alter, "database", ESqlStatementType.sstalterdatabase);
030        addCmd(TBaseType.rrw_alter, "file", "format", ESqlStatementType.sstAlterFileFormat);
031        addCmd(TBaseType.rrw_alter, "function", ESqlStatementType.sstalterfunction);
032        addCmd(TBaseType.rrw_alter, "materialized", "view", ESqlStatementType.sstAlterMaterializedView);
033        addCmd(TBaseType.rrw_alter, "network", "policy", ESqlStatementType.sstAlterNetworkPolicy);
034        addCmd(TBaseType.rrw_alter, "pipe", ESqlStatementType.sstAlterPipe);
035        addCmd(TBaseType.rrw_alter, "resource", "monitor", ESqlStatementType.sstAlterResourceMonitor);
036        addCmd(TBaseType.rrw_alter, "role", ESqlStatementType.sstAlterRole);
037        addCmd(TBaseType.rrw_alter, "task", ESqlStatementType.sstAlterTask);
038        addCmd(TBaseType.rrw_alter, "dynamic", "table", ESqlStatementType.sstAlterDynamicTable);
039        addCmd(TBaseType.rrw_alter, "schema", ESqlStatementType.sstAlterSchema);
040        addCmd(TBaseType.rrw_alter, "session", ESqlStatementType.sstaltersession);
041        addCmd(TBaseType.rrw_alter, "sequence", ESqlStatementType.sstaltersequence);
042        addCmd(TBaseType.rrw_alter, "share", ESqlStatementType.sstAlterShare);
043        addCmd(TBaseType.rrw_alter, "stage", ESqlStatementType.sstAlterStage);
044        addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstaltertable);
045        addCmd(TBaseType.rrw_alter, "user", ESqlStatementType.sstalteruser);
046        addCmd(TBaseType.rrw_alter, "view", ESqlStatementType.sstalterview);
047        addCmd(TBaseType.rrw_alter, "warehouse", ESqlStatementType.sstAlterWarehouse);
048
049        // BEGIN commands
050        addCmd(TBaseType.rrw_begin, "work", ESqlStatementType.sstbegintran);
051        addCmd(TBaseType.rrw_begin, "transaction", ESqlStatementType.sstbegintran);
052        addCmd(TBaseType.rrw_begin, "name", ESqlStatementType.sstbegintran);
053        addCmd(TBaseType.rrw_begin, ESqlStatementType.sstBegin);
054        addCmd(TBaseType.rrw_snowflake_begin_transaction, ESqlStatementType.sstbegintran);
055
056        // PL/SQL block delimiter for procedure body reparsing
057        addCmd(TBaseType.rrw_snowflake_plpgsql_function_delimiter, ESqlStatementType.sstPostgresqlBlock);
058
059        // Other commands
060        addCmd(TBaseType.rrw_call, ESqlStatementType.sstcall);
061        addCmd(TBaseType.rrw_comment, ESqlStatementType.sstcomment);
062        addCmd(TBaseType.rrw_commit, ESqlStatementType.sstcommit);
063        addCmd(TBaseType.rrw_snowflake_copy, "into", ESqlStatementType.sstCopyInto);
064
065        // CREATE commands - longer patterns first
066        addCmd(TBaseType.rrw_create, "or", "replace", "global", "temporary", "table", ESqlStatementType.sstcreatetable);
067        addCmd(TBaseType.rrw_create, "or", "replace", "local", "temporary", "table", ESqlStatementType.sstcreatetable);
068        addCmd(TBaseType.rrw_create, "or", "replace", "transient", "dynamic", "table", ESqlStatementType.sstcreatetable);
069        addCmd(TBaseType.rrw_create, "or", "replace", "external", "table", ESqlStatementType.sstcreatetable);
070        addCmd(TBaseType.rrw_create, "or", "replace", "dynamic", "table", ESqlStatementType.sstcreatetable);
071        addCmd(TBaseType.rrw_create, "or", "replace", "file", "format", ESqlStatementType.sstCreateFileFormat);
072        addCmd(TBaseType.rrw_create, "or", "replace", "force", "view", ESqlStatementType.sstcreateview);
073        addCmd(TBaseType.rrw_create, "or", "replace", "hybrid", "table", ESqlStatementType.sstcreatetable);
074        addCmd(TBaseType.rrw_create, "or", "replace", "iceberg", "table", ESqlStatementType.sstcreatetable);
075        addCmd(TBaseType.rrw_create, "or", "replace", "materialized", "view", ESqlStatementType.sstcreatematerializedview);
076        addCmd(TBaseType.rrw_create, "or", "replace", "aggregation", "policy", ESqlStatementType.sstCreateAggregationPolicy);
077        addCmd(TBaseType.rrw_create, "or", "replace", "join", "policy", ESqlStatementType.sstCreateJoinPolicy);
078        addCmd(TBaseType.rrw_create, "or", "replace", "masking", "policy", ESqlStatementType.sstCreateMaskingPolicy);
079        addCmd(TBaseType.rrw_create, "or", "replace", "network", "policy", ESqlStatementType.sstCreateNetworkPolicy);
080        addCmd(TBaseType.rrw_create, "or", "replace", "projection", "policy", ESqlStatementType.sstCreateProjectionPolicy);
081        addCmd(TBaseType.rrw_create, "or", "replace", "row", "access", "policy", ESqlStatementType.sstCreateRowAccessPolicy);
082        addCmd(TBaseType.rrw_create, "or", "replace", "recursive", "view", ESqlStatementType.sstcreateview);
083        addCmd(TBaseType.rrw_create, "or", "replace", "resource", "monitor", ESqlStatementType.sstCreateResourceMonitor);
084        addCmd(TBaseType.rrw_create, "or", "replace", "secure", "materialized", "view", ESqlStatementType.sstcreatematerializedview);
085        addCmd(TBaseType.rrw_create, "or", "replace", "secure", "view", ESqlStatementType.sstcreateview);
086        addCmd(TBaseType.rrw_create, "or", "replace", "temp", "stage", ESqlStatementType.sstCreateStage);
087        addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "stage", ESqlStatementType.sstCreateStage);
088        addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "table", ESqlStatementType.sstcreatetable);
089        addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "view", ESqlStatementType.sstcreateview);
090        addCmd(TBaseType.rrw_create, "or", "replace", "transient", "database", ESqlStatementType.sstcreatedatabase);
091        addCmd(TBaseType.rrw_create, "or", "replace", "transient", "schema", ESqlStatementType.sstcreateschema);
092        addCmd(TBaseType.rrw_create, "or", "replace", "transient", "table", ESqlStatementType.sstcreatetable);
093        addCmd(TBaseType.rrw_create, "or", "replace", "database", ESqlStatementType.sstcreatedatabase);
094        addCmd(TBaseType.rrw_create, "or", "replace", "function", ESqlStatementType.sstcreatefunction);
095        addCmd(TBaseType.rrw_create, "or", "replace", "secure", "function", ESqlStatementType.sstcreatefunction);
096        addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "function", ESqlStatementType.sstcreatefunction);
097        addCmd(TBaseType.rrw_create, "or", "replace", "external", "function", ESqlStatementType.sstcreatefunction);
098        addCmd(TBaseType.rrw_create, "or", "replace", "pipe", ESqlStatementType.sstCreatePipe);
099        addCmd(TBaseType.rrw_create, "or", "replace", "procedure", ESqlStatementType.sstcreateprocedure);
100        addCmd(TBaseType.rrw_create, "or", "replace", "role", ESqlStatementType.sstcreaterole);
101        addCmd(TBaseType.rrw_create, "or", "replace", "schema", ESqlStatementType.sstcreateschema);
102        addCmd(TBaseType.rrw_create, "or", "replace", "semantic", "view", ESqlStatementType.sstcreatesemanticview);
103        addCmd(TBaseType.rrw_create, "or", "replace", "sequence", ESqlStatementType.sstcreatesequence);
104        addCmd(TBaseType.rrw_create, "or", "replace", "share", ESqlStatementType.sstCreateShare);
105        addCmd(TBaseType.rrw_create, "or", "replace", "tag", ESqlStatementType.sstCreateTag);
106        addCmd(TBaseType.rrw_create, "or", "replace", "stage", ESqlStatementType.sstCreateStage);
107        addCmd(TBaseType.rrw_create, "or", "replace", "stream", ESqlStatementType.sstCreateStream);
108        addCmd(TBaseType.rrw_create, "or", "replace", "table", ESqlStatementType.sstcreatetable);
109        addCmd(TBaseType.rrw_create, "or", "replace", "task", ESqlStatementType.sstCreateTask);
110        addCmd(TBaseType.rrw_create, "or", "replace", "temp", "table", ESqlStatementType.sstcreatetable);
111        addCmd(TBaseType.rrw_create, "or", "replace", "temp", "view", ESqlStatementType.sstcreateview);
112        addCmd(TBaseType.rrw_create, "or", "replace", "user", ESqlStatementType.sstcreateuser);
113        addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstcreateview);
114        addCmd(TBaseType.rrw_create, "or", "replace", "warehouse", ESqlStatementType.sstCreateWarehouse);
115
116        // CREATE OR ALTER TABLE
117        addCmd(TBaseType.rrw_create, "or", "alter", "table", ESqlStatementType.sstcreatetable);
118
119        // CREATE OR ALTER VIEW
120        addCmd(TBaseType.rrw_create, "or", "alter", "secure", "view", ESqlStatementType.sstcreateview);
121        addCmd(TBaseType.rrw_create, "or", "alter", "force", "view", ESqlStatementType.sstcreateview);
122        addCmd(TBaseType.rrw_create, "or", "alter", "temporary", "view", ESqlStatementType.sstcreateview);
123        addCmd(TBaseType.rrw_create, "or", "alter", "temp", "view", ESqlStatementType.sstcreateview);
124        addCmd(TBaseType.rrw_create, "or", "alter", "recursive", "view", ESqlStatementType.sstcreateview);
125        addCmd(TBaseType.rrw_create, "or", "alter", "view", ESqlStatementType.sstcreateview);
126
127        // CREATE OR ALTER TAG
128        addCmd(TBaseType.rrw_create, "or", "alter", "tag", ESqlStatementType.sstCreateTag);
129
130        // CREATE OR ALTER FUNCTION
131        addCmd(TBaseType.rrw_create, "or", "alter", "function", ESqlStatementType.sstcreatefunction);
132        addCmd(TBaseType.rrw_create, "or", "alter", "secure", "function", ESqlStatementType.sstcreatefunction);
133        addCmd(TBaseType.rrw_create, "or", "alter", "temporary", "function", ESqlStatementType.sstcreatefunction);
134        addCmd(TBaseType.rrw_create, "or", "alter", "external", "function", ESqlStatementType.sstcreatefunction);
135
136        // CREATE without OR REPLACE - 3+ tokens
137        addCmd(TBaseType.rrw_create, "global", "temporary", "table", ESqlStatementType.sstcreatetable);
138        addCmd(TBaseType.rrw_create, "global", "temp", "table", ESqlStatementType.sstcreatetable);
139        addCmd(TBaseType.rrw_create, "local", "temporary", "table", ESqlStatementType.sstcreatetable);
140        addCmd(TBaseType.rrw_create, "local", "temp", "table", ESqlStatementType.sstcreatetable);
141        addCmd(TBaseType.rrw_create, "dynamic", "table", ESqlStatementType.sstcreatetable);
142        addCmd(TBaseType.rrw_create, "external", "table", ESqlStatementType.sstcreatetable);
143        addCmd(TBaseType.rrw_create, "external", "function", ESqlStatementType.sstcreatefunction);
144        addCmd(TBaseType.rrw_create, "file", "format", ESqlStatementType.sstCreateFileFormat);
145        addCmd(TBaseType.rrw_create, "global", "table", ESqlStatementType.sstcreatetable);
146        addCmd(TBaseType.rrw_create, "hybrid", "table", ESqlStatementType.sstcreatetable);
147        addCmd(TBaseType.rrw_create, "iceberg", "table", ESqlStatementType.sstcreatetable);
148        addCmd(TBaseType.rrw_create, "local", "table", ESqlStatementType.sstcreatetable);
149        addCmd(TBaseType.rrw_create, "materialized", "view", ESqlStatementType.sstcreatematerializedview);
150        addCmd(TBaseType.rrw_create, "aggregation", "policy", ESqlStatementType.sstCreateAggregationPolicy);
151        addCmd(TBaseType.rrw_create, "join", "policy", ESqlStatementType.sstCreateJoinPolicy);
152        addCmd(TBaseType.rrw_create, "masking", "policy", ESqlStatementType.sstCreateMaskingPolicy);
153        addCmd(TBaseType.rrw_create, "network", "policy", ESqlStatementType.sstCreateNetworkPolicy);
154        addCmd(TBaseType.rrw_create, "projection", "policy", ESqlStatementType.sstCreateProjectionPolicy);
155        addCmd(TBaseType.rrw_create, "recursive", "view", ESqlStatementType.sstcreateview);
156        addCmd(TBaseType.rrw_create, "resource", "monitor", ESqlStatementType.sstCreateResourceMonitor);
157        addCmd(TBaseType.rrw_create, "row", "access", "policy", ESqlStatementType.sstCreateRowAccessPolicy);
158        addCmd(TBaseType.rrw_create, "secure", "materialized", "view", ESqlStatementType.sstcreatematerializedview);
159        addCmd(TBaseType.rrw_create, "secure", "view", ESqlStatementType.sstcreateview);
160        addCmd(TBaseType.rrw_create, "secure", "function", ESqlStatementType.sstcreatefunction);
161        addCmd(TBaseType.rrw_create, "temp", "stage", ESqlStatementType.sstCreateStage);
162        addCmd(TBaseType.rrw_create, "temp", "table", ESqlStatementType.sstcreatetable);
163        addCmd(TBaseType.rrw_create, "temporary", "stage", ESqlStatementType.sstCreateStage);
164        addCmd(TBaseType.rrw_create, "temporary", "function", ESqlStatementType.sstcreatefunction);
165        addCmd(TBaseType.rrw_create, "temporary", "table", ESqlStatementType.sstcreatetable);
166        addCmd(TBaseType.rrw_create, "transient", "dynamic", "table", ESqlStatementType.sstcreatetable);
167        addCmd(TBaseType.rrw_create, "transient", "database", ESqlStatementType.sstcreatedatabase);
168        addCmd(TBaseType.rrw_create, "transient", "schema", ESqlStatementType.sstcreateschema);
169        addCmd(TBaseType.rrw_create, "transient", "table", ESqlStatementType.sstcreatetable);
170
171        // CREATE - 2 tokens
172        addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstcreatedatabase);
173        addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstcreatefunction);
174        addCmd(TBaseType.rrw_create, "pipe", ESqlStatementType.sstCreatePipe);
175        addCmd(TBaseType.rrw_create, "procedure", ESqlStatementType.sstcreateprocedure);
176        addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstcreaterole);
177        addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstcreateschema);
178        addCmd(TBaseType.rrw_create, "semantic", "view", ESqlStatementType.sstcreatesemanticview);
179        addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstcreatesequence);
180        addCmd(TBaseType.rrw_create, "share", ESqlStatementType.sstCreateShare);
181        addCmd(TBaseType.rrw_create, "stage", ESqlStatementType.sstCreateStage);
182        addCmd(TBaseType.rrw_create, "stream", ESqlStatementType.sstCreateStream);
183        addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable);
184        addCmd(TBaseType.rrw_create, "tag", ESqlStatementType.sstCreateTag);
185        addCmd(TBaseType.rrw_create, "task", ESqlStatementType.sstCreateTask);
186        addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstcreateuser);
187        addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstcreateview);
188        addCmd(TBaseType.rrw_create, "warehouse", ESqlStatementType.sstCreateWarehouse);
189
190        // DELETE
191        addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete);
192
193        // DESCRIBE/DESC commands - 3 tokens
194        addCmd(TBaseType.rrw_snowflake_desc, "file", "format", ESqlStatementType.sstDescFileFormat);
195        addCmd(TBaseType.rrw_snowflake_desc, "network", "policy", ESqlStatementType.sstDescNetworkPolicy);
196        addCmd(TBaseType.rrw_describe, "file", "format", ESqlStatementType.sstDescFileFormat);
197        addCmd(TBaseType.rrw_describe, "network", "policy", ESqlStatementType.sstDescNetworkPolicy);
198        addCmd(TBaseType.rrw_describe, "user", "functions", ESqlStatementType.sstDescFunction);
199
200        // DESCRIBE/DESC commands - 2 tokens
201        addCmd(TBaseType.rrw_snowflake_desc, "function", ESqlStatementType.sstDescFunction);
202        addCmd(TBaseType.rrw_snowflake_desc, "pipe", ESqlStatementType.sstDescPipe);
203        addCmd(TBaseType.rrw_snowflake_desc, "result", ESqlStatementType.sstDescResult);
204        addCmd(TBaseType.rrw_snowflake_desc, "share", ESqlStatementType.sstDescShare);
205        addCmd(TBaseType.rrw_snowflake_desc, "stage", ESqlStatementType.sstDescStage);
206        addCmd(TBaseType.rrw_snowflake_desc, "storage", ESqlStatementType.sstDescStorage);
207        addCmd(TBaseType.rrw_snowflake_desc, "table", ESqlStatementType.sstDescTable);
208        addCmd(TBaseType.rrw_snowflake_desc, "user", ESqlStatementType.sstDescUser);
209        addCmd(TBaseType.rrw_snowflake_desc, "view", ESqlStatementType.sstDescView);
210        addCmd(TBaseType.rrw_describe, "function", ESqlStatementType.sstDescFunction);
211        addCmd(TBaseType.rrw_describe, "pipe", ESqlStatementType.sstDescPipe);
212        addCmd(TBaseType.rrw_describe, "result", ESqlStatementType.sstDescResult);
213        addCmd(TBaseType.rrw_describe, "share", ESqlStatementType.sstDescShare);
214        addCmd(TBaseType.rrw_describe, "stage", ESqlStatementType.sstDescStage);
215        addCmd(TBaseType.rrw_describe, "storage", ESqlStatementType.sstDescStorage);
216        addCmd(TBaseType.rrw_describe, "table", ESqlStatementType.sstDescTable);
217        addCmd(TBaseType.rrw_describe, "user", ESqlStatementType.sstDescUser);
218        addCmd(TBaseType.rrw_describe, "view", ESqlStatementType.sstDescView);
219
220        // DROP commands - 3 tokens
221        addCmd(TBaseType.rrw_drop, "file", "format", ESqlStatementType.sstDropFileFormat);
222        addCmd(TBaseType.rrw_drop, "materialized", "view", ESqlStatementType.sstDropMaterializedView);
223        addCmd(TBaseType.rrw_drop, "network", "policy", ESqlStatementType.sstDropNetworkPolicy);
224        addCmd(TBaseType.rrw_drop, "resource", "monitor", ESqlStatementType.sstDropResourceMonitor);
225
226        // DROP commands - 2 tokens
227        addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstdropdatabase);
228        addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstdropfunction);
229        addCmd(TBaseType.rrw_drop, "pipe", ESqlStatementType.sstDropPipe);
230        addCmd(TBaseType.rrw_drop, "procedure", ESqlStatementType.sstdropprocedure);
231        addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstdroprole);
232        addCmd(TBaseType.rrw_drop, "schema", ESqlStatementType.sstdropschema);
233        addCmd(TBaseType.rrw_drop, "share", ESqlStatementType.sstDropShare);
234        addCmd(TBaseType.rrw_drop, "stage", ESqlStatementType.sstDropStage);
235        addCmd(TBaseType.rrw_drop, "stream", ESqlStatementType.sstDropStream);
236        addCmd(TBaseType.rrw_drop, "streamlit", ESqlStatementType.sstDropStreamlit);
237        addCmd(TBaseType.rrw_drop, "task", ESqlStatementType.sstDropTask);
238        addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstdroptable);
239        addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstdropuser);
240        addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstdropview);
241        addCmd(TBaseType.rrw_drop, "warehouse", ESqlStatementType.sstDropWarehouse);
242
243        // EXECUTE
244        addCmd(TBaseType.rrw_execute, "immediate", ESqlStatementType.sstExecute);
245        addCmd(TBaseType.rrw_execute, "task", ESqlStatementType.sstExecute);
246
247        // Other commands
248        addCmd(TBaseType.rrw_get, ESqlStatementType.sstGet);
249        addCmd(TBaseType.rrw_grant, ESqlStatementType.sstGrant);
250        addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert);
251        addCmd(TBaseType.rrw_snowflake_list, ESqlStatementType.sstList);
252        addCmd(TBaseType.rrw_snowflake_ls, ESqlStatementType.sstList);
253        addCmd(TBaseType.rrw_merge, ESqlStatementType.sstmerge);
254        addCmd(TBaseType.rrw_snowflake_pseudo_stmt_sign, ESqlStatementType.sstSnowflakePseudoExprStmt);
255        addCmd(TBaseType.rrw_snowflake_put, ESqlStatementType.sstPut);
256        addCmd(TBaseType.rrw_snowflake_remove, ESqlStatementType.sstRemove);
257        addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstRevoke);
258        addCmd(TBaseType.rrw_snowflake_rm, ESqlStatementType.sstRemove);
259        addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstrollback);
260        addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect);
261        addCmd(TBaseType.rrw_set, ESqlStatementType.sstset);
262
263        // SHOW commands - 3+ tokens
264        addCmd(TBaseType.rrw_show, "terse", "databases", ESqlStatementType.sstShowDatabases);
265        addCmd(TBaseType.rrw_show, "terse", "streams", ESqlStatementType.sstShowStreams);
266        addCmd(TBaseType.rrw_show, "terse", "tasks", ESqlStatementType.sstShowTasks);
267        addCmd(TBaseType.rrw_show, "file", "formats", ESqlStatementType.sstShowFileFormats);
268        addCmd(TBaseType.rrw_show, "network", "policies", ESqlStatementType.sstShowNetworkPolicies);
269        addCmd(TBaseType.rrw_show, "resource", "monitors", ESqlStatementType.sstShowResourceMonitors);
270        addCmd(TBaseType.rrw_show, "user", "functions", ESqlStatementType.sstShowUserFunctions);
271
272        // SHOW commands - 2 tokens
273        addCmd(TBaseType.rrw_show, "columns", ESqlStatementType.sstShowColumns);
274        addCmd(TBaseType.rrw_show, "databases", ESqlStatementType.sstShowDatabases);
275        addCmd(TBaseType.rrw_show, "functions", ESqlStatementType.sstShowFunctions);
276        addCmd(TBaseType.rrw_show, "grants", ESqlStatementType.sstShowGrants);
277        addCmd(TBaseType.rrw_show, "locks", ESqlStatementType.sstShowLocks);
278        addCmd(TBaseType.rrw_show, "objects", ESqlStatementType.sstShowObjects);
279        addCmd(TBaseType.rrw_show, "parameters", ESqlStatementType.sstShowParameters);
280        addCmd(TBaseType.rrw_show, "pipes", ESqlStatementType.sstShowPipes);
281        addCmd(TBaseType.rrw_show, "procedures", ESqlStatementType.sstShowProcedures);
282        addCmd(TBaseType.rrw_show, "roles", ESqlStatementType.sstShowRoles);
283        addCmd(TBaseType.rrw_show, "schemas", ESqlStatementType.sstShowSchemas);
284        addCmd(TBaseType.rrw_show, "sequences", ESqlStatementType.sstShowSequences);
285        addCmd(TBaseType.rrw_show, "shares", ESqlStatementType.sstShowShares);
286        addCmd(TBaseType.rrw_show, "stages", ESqlStatementType.sstShowStages);
287        addCmd(TBaseType.rrw_show, "streams", ESqlStatementType.sstShowStreams);
288        addCmd(TBaseType.rrw_show, "tables", ESqlStatementType.sstShowTables);
289        addCmd(TBaseType.rrw_show, "tasks", ESqlStatementType.sstShowTasks);
290        addCmd(TBaseType.rrw_show, "transactions", ESqlStatementType.sstShowTransactions);
291        addCmd(TBaseType.rrw_show, "users", ESqlStatementType.sstShowUsers);
292        addCmd(TBaseType.rrw_show, "variables", ESqlStatementType.sstShowVariables);
293        addCmd(TBaseType.rrw_show, "views", ESqlStatementType.sstShowViews);
294        addCmd(TBaseType.rrw_show, "warehouses", ESqlStatementType.sstShowWarehouses);
295
296        // START, TRUNCATE, UNDROP, UNSET, UPDATE, USE
297        addCmd(TBaseType.rrw_start, "transaction", ESqlStatementType.sstbegintran);
298        addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstpostgresqlTruncate);
299        addCmd(TBaseType.rrw_snowflake_undrop, "database", ESqlStatementType.sstUndropDatabase);
300        addCmd(TBaseType.rrw_snowflake_undrop, "schema", ESqlStatementType.sstUndropSchema);
301        addCmd(TBaseType.rrw_snowflake_undrop, "table", ESqlStatementType.sstUndropTable);
302        addCmd(TBaseType.rrw_snowflake_unset, ESqlStatementType.sstunset);
303        addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate);
304        addCmd(TBaseType.rrw_use, "secondary", "roles", ESqlStatementType.sstUseSecondaryRoles);
305        addCmd(TBaseType.rrw_use, ESqlStatementType.sstUse);
306    }
307
308    @Override
309    protected String getToken1Str(int token1) {
310        // Map vendor-specific token codes to their string representations
311        switch (token1) {
312            case TBaseType.rrw_snowflake_list:
313                return "list";
314            case TBaseType.rrw_snowflake_remove:
315                return "remove";
316            case TBaseType.rrw_snowflake_undrop:
317                return "undrop";
318            case TBaseType.rrw_snowflake_copy:
319                return "copy";
320            case TBaseType.rrw_snowflake_desc:
321                return "desc";
322            case TBaseType.rrw_snowflake_ls:
323                return "ls";
324            case TBaseType.rrw_snowflake_put:
325                return "put";
326            case TBaseType.rrw_snowflake_rm:
327                return "rm";
328            case TBaseType.rrw_snowflake_unset:
329                return "unset";
330            default:
331                return null;
332        }
333    }
334
335    @Override
336    public TCustomSqlStatement issql(TSourceToken pcst, EFindSqlStateType pstate, TCustomSqlStatement psqlstatement) {
337        TCustomSqlStatement ret = null;
338
339        gnewsqlstatementtype = ESqlStatementType.sstinvalid;
340
341        if ((pcst.tokencode == TBaseType.cmtdoublehyphen)
342                || (pcst.tokencode == TBaseType.cmtslashstar)
343                || (pcst.tokencode == TBaseType.lexspace)
344                || (pcst.tokencode == TBaseType.lexnewline)
345                || (pcst.tokentype == ETokenType.ttsemicolon)) {
346            return null;
347        }
348
349        int lcpos = pcst.posinlist;
350        TSourceTokenList lcsourcetokenlist = pcst.container;
351        TCustomSqlStatement lccurrentsqlstatement = psqlstatement;
352
353        // Subquery after semicolon or at first line
354        if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokentype == ETokenType.ttleftparenthesis)) {
355            int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "(");
356            if (k > 0) {
357                ret = new TSelectSqlStatement(this.vendor);
358            } else {
359                k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_with, 1, "(");
360                int k2 = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_as, 3, "(");
361                if ((k > 0) && (k2 > 2)) {
362                    ret = new TSelectSqlStatement(this.vendor);
363                }
364            }
365            return ret;
366        }
367
368        // WITH name(...) AS PROCEDURE (anonymous procedure call)
369        if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_with)) {
370            TSourceToken t1 = pcst.nextSolidToken(); // name
371            if (t1 != null) {
372                TSourceToken t2 = t1.nextSolidToken(); // ( or AS
373                // Skip past parenthesized parameter list if present: WITH name(...) AS PROCEDURE
374                if (t2 != null && t2.tokentype == ETokenType.ttleftparenthesis) {
375                    int parenDepth = 1;
376                    TSourceToken t = t2.nextSolidToken();
377                    while (t != null && parenDepth > 0) {
378                        if (t.tokentype == ETokenType.ttleftparenthesis) parenDepth++;
379                        else if (t.tokentype == ETokenType.ttrightparenthesis) parenDepth--;
380                        if (parenDepth > 0) t = t.nextSolidToken();
381                    }
382                    if (t != null) t2 = t.nextSolidToken(); // AS after )
383                    else t2 = null;
384                }
385                if (t2 != null && t2.tokencode == TBaseType.rrw_as) {
386                    TSourceToken t3 = t2.nextSolidToken(); // PROCEDURE
387                    if (t3 != null && t3.tokencode == TBaseType.rrw_procedure) {
388                        ret = new TCreateProcedureStmt(this.vendor);
389                        ret.sqlstatementtype = ESqlStatementType.sstcreateprocedure;
390                        return ret;
391                    }
392                }
393            }
394        }
395
396        // CTE
397        if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_with)) {
398            ret = findcte(pcst);
399            if (ret != null) return ret;
400        }
401
402        gnewsqlstatementtype = getStatementTypeForToken(pcst);
403
404        TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
405        switch (gnewsqlstatementtype) {
406            case sstinvalid: {
407                ret = null;
408
409                if (pstate == EFindSqlStateType.stnormal) {
410                    if (pcst.tokencode == TBaseType.label_begin) {
411                        ret = new TCommonBlock(this.vendor);
412                        gnewsqlstatementtype = ret.sqlstatementtype;
413                    } else if (pcst.tokencode == TBaseType.rrw_declare) {
414                        ret = new TCommonBlock(this.vendor);
415                        gnewsqlstatementtype = ret.sqlstatementtype;
416                    } else if (pcst.tokencode == TBaseType.rrw_begin) {
417                        ret = new TCommonBlock(this.vendor);
418                        gnewsqlstatementtype = ret.sqlstatementtype;
419                    } else if (pcst.tokencode == TBaseType.rrw_procedure) {
420                        ret = new TPlsqlCreateProcedure(this.vendor);
421                        gnewsqlstatementtype = ret.sqlstatementtype;
422                    } else if (pcst.tokencode == TBaseType.rrw_function) {
423                        ret = new TPlsqlCreateFunction(this.vendor);
424                        gnewsqlstatementtype = ret.sqlstatementtype;
425                    } else if (pcst.tokencode == TBaseType.rrw_package) {
426                        ret = new TPlsqlCreatePackage(this.vendor);
427                        gnewsqlstatementtype = ret.sqlstatementtype;
428                    }
429                }
430                break;
431            }
432            case sstselect: {
433                boolean lcisnewsql = true;
434
435                if (pstate != EFindSqlStateType.stnormal) {
436                    if (lcprevsolidtoken != null) {
437                        if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis)
438                            lcisnewsql = false; // subquery
439                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union)
440                            lcisnewsql = false;
441                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect)
442                            lcisnewsql = false;
443                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus)
444                            lcisnewsql = false;
445                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except)
446                            lcisnewsql = false;
447                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return)
448                            lcisnewsql = false;
449                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) {
450                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable)
451                                lcisnewsql = false;
452                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview)
453                                lcisnewsql = false;
454                        }
455
456                        if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) {
457                            TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist);
458                            if (lcpprevsolidtoken != null) {
459                                if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union)
460                                    lcisnewsql = false;
461                            }
462                        }
463                    }
464
465                    if (lccurrentsqlstatement != null) {
466                        if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert)
467                            lcisnewsql = false;
468                    }
469                }
470
471                if (lcisnewsql)
472                    ret = new TSelectSqlStatement(this.vendor);
473
474                break;
475            }
476            case sstinsert: {
477                boolean lcisnewsql = true;
478                if (pstate != EFindSqlStateType.stnormal) {
479                    if (lccurrentsqlstatement != null) {
480                    }
481                }
482
483                if (lcisnewsql)
484                    ret = new TInsertSqlStatement(this.vendor);
485
486                break;
487            }
488            case sstupdate: {
489                boolean lcisnewsql = true;
490                if (pstate != EFindSqlStateType.stnormal) {
491                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
492                    if (lcprevsolidtoken != null) {
493                        if (lcprevsolidtoken.tokencode == TBaseType.rrw_on)
494                            lcisnewsql = false;
495                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for)
496                            lcisnewsql = false;
497                    }
498
499                    TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false);
500                    if (lcnextsolidtoken != null) {
501                        if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) {
502                            int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "(");
503                            if (k == 0) lcisnewsql = false;
504                        }
505                    }
506
507                    if (lccurrentsqlstatement != null) {
508                    }
509                }
510
511                if (lcisnewsql) {
512                    ret = new TUpdateSqlStatement(this.vendor);
513                    ret.dummytag = 1; // means set clause in update is not found yet, used to separate set clause from set statement
514                }
515                break;
516            }
517            case sstdelete: {
518                boolean lcisnewsql = true;
519
520                if (pstate != EFindSqlStateType.stnormal) {
521                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
522                    if (lcprevsolidtoken != null) {
523                        if (lcprevsolidtoken.tokencode == TBaseType.rrw_on)
524                            lcisnewsql = false;
525                    }
526
527                    if (lccurrentsqlstatement != null) {
528                    }
529                }
530
531                if (lcisnewsql)
532                    ret = new TDeleteSqlStatement(this.vendor);
533
534                break;
535            }
536            case sstmerge: {
537                ret = new TMergeSqlStatement(this.vendor);
538                ret.sqlstatementtype = gnewsqlstatementtype;
539                break;
540            }
541            case sstoraclecommit: {
542                ret = new TUnknownSqlStatement(this.vendor);
543                ret.sqlstatementtype = gnewsqlstatementtype;
544                break;
545            }
546            case sstoraclerollback: {
547                ret = new TUnknownSqlStatement(this.vendor);
548                ret.sqlstatementtype = gnewsqlstatementtype;
549                break;
550            }
551            case sstoraclerevoke: {
552                ret = new TUnknownSqlStatement(this.vendor);
553                ret.sqlstatementtype = gnewsqlstatementtype;
554                break;
555            }
556            case sstoraclegrant: {
557                ret = new TUnknownSqlStatement(this.vendor);
558                ret.sqlstatementtype = gnewsqlstatementtype;
559                break;
560            }
561            case sstcreatetable: {
562                ret = new TCreateTableSqlStatement(this.vendor);
563                break;
564            }
565            case sstoraclecreateview: {
566                ret = new TCreateViewSqlStatement(this.vendor);
567                break;
568            }
569            case sstAlterAccount: {
570                ret = new TAlterAccountStmt(this.vendor);
571                break;
572            }
573            case sstalterdatabase: {
574                ret = new TAlterDatabaseStmt(this.vendor);
575                break;
576            }
577            case sstAlterFileFormat: {
578                ret = new TAlterFileFormatStmt(this.vendor);
579                break;
580            }
581            case sstalterfunction: {
582                ret = new TAlterFunctionStmt(this.vendor);
583                break;
584            }
585            case sstAlterNetworkPolicy: {
586                ret = new TAlterNetworkPolicyStmt(this.vendor);
587                break;
588            }
589            case sstAlterPipe: {
590                ret = new TAlterPipeStmt(this.vendor);
591                break;
592            }
593            case sstAlterResourceMonitor: {
594                ret = new TAlterResourceMonitorStmt(this.vendor);
595                break;
596            }
597            case sstAlterRole: {
598                ret = new TAlterRoleStmt(this.vendor);
599                break;
600            }
601            case sstAlterSchema: {
602                ret = new TAlterSchemaStmt(this.vendor);
603                break;
604            }
605            case sstaltersequence: {
606                ret = new TAlterSequenceStatement(this.vendor);
607                break;
608            }
609            case sstaltersession: {
610                ret = new TAlterSessionStatement(this.vendor);
611                break;
612            }
613            case sstAlterStage: {
614                ret = new TAlterStageStmt(this.vendor);
615                break;
616            }
617            case sstalteruser: {
618                ret = new TAlterUserStmt(this.vendor);
619                break;
620            }
621            case sstAlterShare: {
622                ret = new TAlterShareStmt(this.vendor);
623                break;
624            }
625            case sstalterview: {
626                ret = new TAlterViewStatement(this.vendor);
627                break;
628            }
629            case sstAlterWarehouse: {
630                ret = new TAlterWarehouseStmt(this.vendor);
631                break;
632            }
633            case sstBegin: {
634                // Distinguish BEGIN...END scripting block from BEGIN [name] transaction.
635                // Pre-processing already converts BEGIN; to rrw_snowflake_begin_transaction.
636                // BEGIN WORK/TRANSACTION/NAME are handled by sstbegintran via addCmd.
637                // Remaining cases: BEGIN <ident> (transaction with name) vs BEGIN <keyword> (block).
638                boolean isblock = false;
639                TSourceToken firstSolid = null;
640
641                if (lcpos < lcsourcetokenlist.size() - 1) {
642                    for (int i = lcpos + 1; i < lcsourcetokenlist.size(); i++) {
643                        TSourceToken st = lcsourcetokenlist.get(i);
644                        if (st.issolidtoken()) {
645                            if (firstSolid == null) {
646                                firstSolid = st;
647                            }
648                        }
649                        // Newline before first semicolon means multiline block
650                        if (st.tokencode == TBaseType.lexnewline) {
651                            isblock = true;
652                            break;
653                        }
654                        if (st.tokencode == ';') {
655                            break;
656                        }
657                    }
658                }
659
660                // If no newline found, check if the first solid token is a keyword.
661                // Transaction names are identifiers (BEGIN my_txn;), not keywords.
662                // If it's a keyword (RETURN, SELECT, IF, LOOP, etc.), it's a block.
663                if (!isblock && firstSolid != null && firstSolid.tokencode != TBaseType.ident) {
664                    isblock = true;
665                }
666
667                if (isblock) {
668                    ret = new TCommonBlock(this.vendor);
669                    gnewsqlstatementtype = ret.sqlstatementtype;
670                } else {
671                    ret = new TBeginTran(this.vendor);
672                    pcst.tokencode = TBaseType.rrw_snowflake_begin_transaction;
673                }
674
675                break;
676            }
677            case sstbegintran: {
678                ret = new TBeginTran(this.vendor);
679                if (pcst.tokencode == TBaseType.rrw_begin) {
680                    pcst.tokencode = TBaseType.rrw_snowflake_begin_transaction;
681                }
682                break;
683            }
684            case sstcomment: {
685                ret = new TCommentOnSqlStmt(this.vendor);
686                break;
687            }
688            case sstcommit: {
689                ret = new TCommitStmt(this.vendor);
690                break;
691            }
692            case sstCopyInto: {
693                ret = new TSnowflakeCopyIntoStmt(this.vendor);
694                break;
695            }
696            case sstcreatedatabase: {
697                ret = new TCreateDatabaseSqlStatement(this.vendor);
698                break;
699            }
700            case sstCreateFileFormat: {
701                ret = new TCreateFileFormatStmt(this.vendor);
702                break;
703            }
704            case sstcreatefunction: {
705                ret = new TCreateFunctionStmt(this.vendor);
706                break;
707            }
708            case sstCreateAggregationPolicy: {
709                ret = new TCreateAggregationPolicyStmt(this.vendor);
710                break;
711            }
712            case sstCreateJoinPolicy: {
713                ret = new TCreateJoinPolicyStmt(this.vendor);
714                break;
715            }
716            case sstCreateMaskingPolicy: {
717                ret = new TCreateMaskingPolicyStmt(this.vendor);
718                break;
719            }
720            case sstCreateNetworkPolicy: {
721                ret = new TCreateNetworkPolicyStmt(this.vendor);
722                break;
723            }
724            case sstCreateProjectionPolicy: {
725                ret = new TCreateProjectionPolicyStmt(this.vendor);
726                break;
727            }
728            case sstCreateRowAccessPolicy: {
729                ret = new TCreateRowAccessPolicyStmt(this.vendor);
730                break;
731            }
732            case sstCreateTag: {
733                ret = new TCreateTagStmt(this.vendor);
734                break;
735            }
736            case sstCreatePipe: {
737                ret = new TCreatePipeStmt(this.vendor);
738                break;
739            }
740            case sstCreateResourceMonitor: {
741                ret = new TCreateResourceMonitorStmt(this.vendor);
742                break;
743            }
744            case sstcreaterole: {
745                ret = new TCreateRoleStmt(this.vendor);
746                break;
747            }
748            case sstcreateschema: {
749                ret = new TCreateSchemaSqlStatement(this.vendor);
750                break;
751            }
752            case sstcreatesequence: {
753                ret = new TCreateSequenceStmt(this.vendor);
754                break;
755            }
756            case sstCreateShare: {
757                ret = new TCreateShareStmt(this.vendor);
758                break;
759            }
760            case sstCreateStage: {
761                ret = new TCreateStageStmt(this.vendor);
762                break;
763            }
764            case sstcreateuser: {
765                ret = new TCreateUserStmt(this.vendor);
766                break;
767            }
768            case sstCreateWarehouse: {
769                ret = new TCreateWarehouseStmt(this.vendor);
770                break;
771            }
772            case sstDescFileFormat:
773            case sstDescFunction:
774            case sstDescNetworkPolicy:
775            case sstDescPipe:
776            case sstDescResult:
777            case sstDescShare:
778            case sstDescStage:
779            case sstDescTable:
780            case sstDescUser:
781            case sstDescView:
782            case sstDescStorage: {
783                ret = new TDescribeStmt(this.vendor);
784                break;
785            }
786            case sstdropfunction: {
787                ret = new TDropFunctionStmt(this.vendor);
788                break;
789            }
790            case sstdropdatabase: {
791                ret = new TDropDatabaseStmt(this.vendor);
792                break;
793            }
794            case sstDropFileFormat: {
795                ret = new TDropStmt(this.vendor);
796                ret.sqlstatementtype = gnewsqlstatementtype;
797                break;
798            }
799            case sstDropNetworkPolicy: {
800                ret = new TDropStmt(this.vendor);
801                ret.sqlstatementtype = gnewsqlstatementtype;
802                break;
803            }
804            case sstDropPipe: {
805                ret = new TDropStmt(this.vendor);
806                ret.sqlstatementtype = gnewsqlstatementtype;
807                break;
808            }
809            case sstDropResourceMonitor: {
810                ret = new TDropStmt(this.vendor);
811                ret.sqlstatementtype = gnewsqlstatementtype;
812                break;
813            }
814            case sstdroprole: {
815                ret = new TDropRoleStmt(this.vendor);
816                break;
817            }
818            case sstdropschema: {
819                ret = new TDropSchemaSqlStatement(this.vendor);
820                break;
821            }
822            case sstDropShare: {
823                ret = new TDropStmt(this.vendor);
824                ret.sqlstatementtype = gnewsqlstatementtype;
825                break;
826            }
827            case sstDropStage: {
828                ret = new TDropStmt(this.vendor);
829                ret.sqlstatementtype = gnewsqlstatementtype;
830                break;
831            }
832            case sstdroptable: {
833                ret = new TDropTableSqlStatement(this.vendor);
834                break;
835            }
836            case sstdropuser: {
837                ret = new TDropUserStmt(this.vendor);
838                break;
839            }
840            case sstdropview: {
841                ret = new TDropViewSqlStatement(this.vendor);
842                break;
843            }
844            case sstDropWarehouse: {
845                ret = new TDropStmt(this.vendor);
846                ret.sqlstatementtype = gnewsqlstatementtype;
847                break;
848            }
849            case sstGet: {
850                ret = new TGetStmt(this.vendor);
851                break;
852            }
853            case sstGrant: {
854                ret = new TGrantStmt(this.vendor);
855                break;
856            }
857            case sstList: {
858                ret = new TListStmt(this.vendor);
859                break;
860            }
861            case sstPut: {
862                ret = new TPutStmt(this.vendor);
863                break;
864            }
865            case sstRemove: {
866                ret = new TRemoveStmt(this.vendor);
867                break;
868            }
869            case sstRevoke: {
870                ret = new TRevokeStmt(this.vendor);
871                break;
872            }
873            case sstrollback: {
874                ret = new TRollbackStmt(this.vendor);
875                break;
876            }
877            case sstset: {
878                ret = new TSetStmt(this.vendor);
879                break;
880            }
881            case sstShowColumns:
882            case sstShowDatabases:
883            case sstShowFileFormats:
884            case sstShowFunctions:
885            case sstShowGrants:
886            case sstShowNetworkPolicies:
887            case sstShowObjects:
888            case sstShowParameters:
889            case sstShowPipes:
890            case sstShowResourceMonitors:
891            case sstShowRoles:
892            case sstShowSchemas:
893            case sstShowSequences:
894            case sstShowShares:
895            case sstShowStages:
896            case sstShowTables:
897            case sstShowTransactions:
898            case sstShowUserFunctions:
899            case sstShowUsers:
900            case sstShowVariables:
901            case sstShowViews:
902            case sstShowWarehouses:
903            case sstShowProcedures:
904            case sstShowTasks:
905            case sstShowStreams: {
906                ret = new TShowStmt(this.vendor);
907                ret.sqlstatementtype = gnewsqlstatementtype;
908                break;
909            }
910            case sstTruncate: {
911                ret = new TTruncateStatement(this.vendor);
912                break;
913            }
914            case sstUndropDatabase:
915            case sstUndropSchema:
916            case sstUndropTable: {
917                ret = new TUndropStmt(this.vendor);
918                ret.sqlstatementtype = gnewsqlstatementtype;
919                break;
920            }
921            case sstunset: {
922                ret = new TUnsetStmt(this.vendor);
923                break;
924            }
925            case sstcreatematerializedview: {
926                ret = new TCreateMaterializedSqlStatement(this.vendor);
927                break;
928            }
929            case sstoraclecreateindex: {
930                ret = new TCreateIndexSqlStatement(this.vendor);
931                break;
932            }
933            case sstoracledroptable: {
934                ret = new TDropTableSqlStatement(this.vendor);
935                break;
936            }
937            case sstoracledropview: {
938                ret = new TDropViewSqlStatement(this.vendor);
939                break;
940            }
941            case sstoracledropindex: {
942                ret = new TDropIndexSqlStatement(this.vendor);
943                break;
944            }
945            case sstaltertable: {
946                ret = new TAlterTableStatement(this.vendor);
947                break;
948            }
949            case sstoraclealtersession: {
950                ret = new TAlterSessionStatement(this.vendor);
951                break;
952            }
953            case sstplsql_createfunction: {
954                ret = new TPlsqlCreateFunction(this.vendor);
955                ret.sqlstatementtype = gnewsqlstatementtype;
956                break;
957            }
958            case sstCommentOn: {
959                ret = new TCommentOnSqlStmt(this.vendor);
960                break;
961            }
962            case sstoraclecreatesequence: {
963                ret = new TCreateSequenceStmt(this.vendor);
964                break;
965            }
966            case sstpostgresqlCreateIndex:
967                ret = new TCreateIndexSqlStatement(this.vendor);
968                break;
969            case sstpostgresqlCreateView:
970                ret = new TCreateViewSqlStatement(this.vendor);
971                break;
972            case sstpostgresqlCreateFunction:
973                ret = new TCreateFunctionStmt(this.vendor);
974                break;
975            case sstpostgresqlTruncate:
976                ret = new TTruncateStatement(this.vendor);
977                break;
978            case sstpostgresqlDropTable:
979                ret = new TDropTableSqlStatement(this.vendor);
980                break;
981            case sstcreateview:
982                ret = new TCreateViewSqlStatement(this.vendor);
983                break;
984            case sstcall:
985                ret = new TCallStatement(this.vendor);
986                break;
987            case sstSnowflakePseudoExprStmt:
988                ret = new TPseudoExprStmt(this.vendor);
989                break;
990            case sstcreateprocedure:
991                ret = new TCreateProcedureStmt(this.vendor);
992                break;
993            case sstCreateStream:
994                ret = new TCreateStreamStmt(this.vendor);
995                break;
996            case sstUse:
997                TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false);
998                if (lcnextsolidtoken != null) {
999                    if (lcnextsolidtoken.toString().equalsIgnoreCase("database")) {
1000                        ret = new TUseDatabase(this.vendor);
1001                    } else if (lcnextsolidtoken.toString().equalsIgnoreCase("role")) {
1002                        ret = new TUseRole(this.vendor);
1003                    } else if (lcnextsolidtoken.toString().equalsIgnoreCase("warehouse")) {
1004                        ret = new TUseWarehouse(this.vendor);
1005                    } else {
1006                        ret = new TUseSchema(this.vendor);
1007                    }
1008                } else {
1009                    ret = new TUnknownSqlStatement(this.vendor);
1010                    ret.sqlstatementtype = gnewsqlstatementtype;
1011                }
1012                break;
1013            case sstExecute: {
1014                ret = new TExecuteSqlStatement(this.vendor);
1015                break;
1016            }
1017            case sstAlterTask:
1018                ret = new TAlterTaskStmt(this.vendor);
1019                break;
1020            case sstAlterDynamicTable:
1021                ret = new TAlterDynamicTableStmt(this.vendor);
1022                break;
1023            case sstCreateTask:
1024                ret = new TCreateTaskStmt(this.vendor);
1025                break;
1026            case sstcreatesemanticview:
1027                ret = new TCreateSemanticViewStmt(this.vendor);
1028                break;
1029            case sstAlterMaterializedView:
1030                ret = new TAlterMaterializedViewStmt(this.vendor);
1031                break;
1032            case sstDropMaterializedView:
1033                ret = new TDropMaterializedViewStmt(this.vendor);
1034                break;
1035            case sstdropprocedure:
1036                ret = new TDropProcedureStmt(this.vendor);
1037                break;
1038            case sstUseSecondaryRoles:
1039                ret = new TUseSecondaryRolesStmt(this.vendor);
1040                break;
1041            case sstDropStreamlit:
1042                ret = new TDropStmt(this.vendor);
1043                break;
1044            case sstDropStream:
1045                ret = new TDropStreamStmt(this.vendor);
1046                break;
1047            case sstDropTask:
1048                ret = new TDropTaskStmt(this.vendor);
1049                break;
1050            default: {
1051                ret = new TUnknownSqlStatement(this.vendor);
1052                ret.sqlstatementtype = gnewsqlstatementtype;
1053                break;
1054            }
1055        }
1056
1057        return ret;
1058    }
1059}