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