001package gudusoft.gsqlparser.sqlcmds;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.stmt.*;
005import gudusoft.gsqlparser.stmt.databricks.*;
006import gudusoft.gsqlparser.stmt.presto.TResetSessionStmt;
007
008/**
009 * Databricks SQL command resolver.
010 * Contains all Databricks-specific SQL command recognition logic.
011 *
012 * @since 3.1.0.9
013 */
014public class TSqlCmdsDatabricks extends AbstractSqlCmds {
015
016    // Temporary field for statement type during issql processing
017    private ESqlStatementType gnewsqlstatementtype = ESqlStatementType.sstinvalid;
018
019    public TSqlCmdsDatabricks() {
020        super(EDbVendor.dbvdatabricks);
021    }
022
023    @Override
024    protected String getToken1Str(int token1) {
025        switch (token1) {
026            case TBaseType.rrw_databricks_convert:
027                return "convert";
028            case TBaseType.rrw_databricks_copy:
029                return "copy";
030            case TBaseType.rrw_databricks_desc:
031                return "desc";
032            case TBaseType.rrw_databricks_fsck:
033                return "fsck";
034            case TBaseType.rrw_databricks_list:
035                return "list";
036            case TBaseType.rrw_databricks_msck:
037                return "msck";
038            case TBaseType.rrw_databricks_reorg:
039                return "reorg";
040            case TBaseType.rrw_databricks_sync:
041                return "sync";
042            case TBaseType.rrw_databricks_uncache:
043                return "uncache";
044            case TBaseType.rrw_databricks_vacuum:
045                return "vacuum";
046            default:
047                return null;
048        }
049    }
050
051    @Override
052    protected void initializeCommands() {
053        // Databricks commands extracted from TSqlCmds.initdatabrickscmds()
054        // Note: Longer patterns must come BEFORE shorter patterns with the same prefix
055
056        addCmd(TBaseType.rrw_add, "archive", ESqlStatementType.sstaddAchieve);
057        addCmd(TBaseType.rrw_add, "archives", ESqlStatementType.sstaddAchieve);
058
059        addCmd(TBaseType.rrw_alter, "catalog", ESqlStatementType.sstaltercatalog);
060        addCmd(TBaseType.rrw_alter, "database", ESqlStatementType.sstalterdatabase);
061        addCmd(TBaseType.rrw_alter, "external", "location", ESqlStatementType.sstalterlocation);
062        addCmd(TBaseType.rrw_alter, "group", ESqlStatementType.sstAlterGroup);
063        addCmd(TBaseType.rrw_alter, "provider", ESqlStatementType.sstalterprovider);
064        addCmd(TBaseType.rrw_alter, "recipient", ESqlStatementType.sstalterrecipient);
065        addCmd(TBaseType.rrw_alter, "schema", ESqlStatementType.sstAlterSchema);
066        addCmd(TBaseType.rrw_alter, "share", ESqlStatementType.sstAltershare);
067        addCmd(TBaseType.rrw_alter, "storage", "credential", ESqlStatementType.sstaltercredental);
068        addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstaltertable);
069        addCmd(TBaseType.rrw_alter, "view", ESqlStatementType.sstalterview);
070
071        addCmd(TBaseType.rrw_analyze, "table", ESqlStatementType.sstAnalyzeTable);
072        addCmd(TBaseType.rrw_analyze, "tables", ESqlStatementType.sstAnalyzeTable);
073
074        addCmd(TBaseType.rrw_cache, "select", ESqlStatementType.sstCacheSelect);
075        addCmd(TBaseType.rrw_clear, "cache", ESqlStatementType.sstClearCache);
076        addCmd(TBaseType.rrw_comment, "on", ESqlStatementType.sstCommentOn);
077
078        addCmd(TBaseType.rrw_databricks_convert, "to", "delta", ESqlStatementType.sstConvertToDelta);
079        addCmd(TBaseType.rrw_databricks_copy, "into", ESqlStatementType.sstCopyInto);
080
081        // CREATE commands - longer patterns first
082        addCmd(TBaseType.rrw_create, "bloomfilter", "index", ESqlStatementType.sstcreateindex);
083        addCmd(TBaseType.rrw_create, "catalog", ESqlStatementType.sstcreatecatalog);
084        addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstcreatedatabase);
085        addCmd(TBaseType.rrw_create, "external", "location", ESqlStatementType.sstCreateExternallocation);
086        addCmd(TBaseType.rrw_create, "group", ESqlStatementType.sstCreategroup);
087        addCmd(TBaseType.rrw_create, "or", "replace", "function", ESqlStatementType.sstcreatefunction);
088        addCmd(TBaseType.rrw_create, "or", "replace", "table", ESqlStatementType.sstcreatetable);
089        addCmd(TBaseType.rrw_create, "or", "replace", "temp", "function", ESqlStatementType.sstcreatefunction);
090        addCmd(TBaseType.rrw_create, "or", "replace", "temp", "view", ESqlStatementType.sstcreateview);
091        addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "function", ESqlStatementType.sstcreatefunction);
092        addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "view", ESqlStatementType.sstcreateview);
093        addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstcreateview);
094        addCmd(TBaseType.rrw_create, "recipient", ESqlStatementType.sstcreaterecipient);
095        addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstcreateschema);
096        addCmd(TBaseType.rrw_create, "share", ESqlStatementType.sstcreateshare);
097        addCmd(TBaseType.rrw_create, "temp", "function", ESqlStatementType.sstcreatefunction);
098        addCmd(TBaseType.rrw_create, "temporary", "function", ESqlStatementType.sstcreatefunction);
099        addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstcreatefunction);
100        addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstcreaterole);
101        addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable);
102        addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstcreateview);
103
104        addCmd(TBaseType.rrw_delete, "from", ESqlStatementType.sstdelete);
105        addCmd(TBaseType.rrw_deny, ESqlStatementType.sstDeny);
106
107        // DESCRIBE commands - longer patterns first
108        addCmd(TBaseType.rrw_databricks_desc, "catalog", ESqlStatementType.sstdescribeCatalog);
109        addCmd(TBaseType.rrw_databricks_desc, "function", ESqlStatementType.sstdescribeFunction);
110        addCmd(TBaseType.rrw_databricks_desc, "provider", ESqlStatementType.sstdescribeProvider);
111        addCmd(TBaseType.rrw_databricks_desc, "query", ESqlStatementType.sstdescribeQuery);
112        addCmd(TBaseType.rrw_databricks_desc, "recipient", ESqlStatementType.sstdescribeRecipient);
113        addCmd(TBaseType.rrw_databricks_desc, "schema", ESqlStatementType.sstdescribeSchema);
114        addCmd(TBaseType.rrw_databricks_desc, "share", ESqlStatementType.sstdescribeShare);
115        addCmd(TBaseType.rrw_databricks_desc, "table", ESqlStatementType.sstdescribeTable);
116        addCmd(TBaseType.rrw_databricks_desc, ESqlStatementType.sstdescribe);
117
118        addCmd(TBaseType.rrw_describe, "catalog", ESqlStatementType.sstdescribeCatalog);
119        addCmd(TBaseType.rrw_describe, "database", ESqlStatementType.sstdescribeDatabase);
120        addCmd(TBaseType.rrw_describe, "external", "location", ESqlStatementType.sstdescribeLocation);
121        addCmd(TBaseType.rrw_describe, "function", ESqlStatementType.sstdescribeFunction);
122        addCmd(TBaseType.rrw_describe, "provider", ESqlStatementType.sstdescribeProvider);
123        addCmd(TBaseType.rrw_describe, "query", ESqlStatementType.sstdescribeQuery);
124        addCmd(TBaseType.rrw_describe, "recipient", ESqlStatementType.sstdescribeRecipient);
125        addCmd(TBaseType.rrw_describe, "schema", ESqlStatementType.sstdescribeSchema);
126        addCmd(TBaseType.rrw_describe, "share", ESqlStatementType.sstdescribeShare);
127        addCmd(TBaseType.rrw_describe, "storage", "credential", ESqlStatementType.sstdescribeCredential);
128        addCmd(TBaseType.rrw_describe, "table", ESqlStatementType.sstdescribeTable);
129        addCmd(TBaseType.rrw_describe, ESqlStatementType.sstdescribe);
130
131        // DROP commands - longer patterns first
132        addCmd(TBaseType.rrw_drop, "bloomfilter", "index", ESqlStatementType.sstdropindex);
133        addCmd(TBaseType.rrw_drop, "catalog", ESqlStatementType.sstdropcatalog);
134        addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstdropdatabase);
135        addCmd(TBaseType.rrw_drop, "external", "location", ESqlStatementType.sstdroplocation);
136        addCmd(TBaseType.rrw_drop, "group", ESqlStatementType.sstDropGroup);
137        addCmd(TBaseType.rrw_drop, "provider", ESqlStatementType.sstdropprovider);
138        addCmd(TBaseType.rrw_drop, "recipient", ESqlStatementType.sstdroprecipient);
139        addCmd(TBaseType.rrw_drop, "schema", ESqlStatementType.sstdropschema);
140        addCmd(TBaseType.rrw_drop, "share", ESqlStatementType.sstdropshare);
141        addCmd(TBaseType.rrw_drop, "storage", "credential", ESqlStatementType.sstdropcredential);
142        addCmd(TBaseType.rrw_drop, "temp", "function", ESqlStatementType.sstdropfunction);
143        addCmd(TBaseType.rrw_drop, "temporary", "function", ESqlStatementType.sstdropfunction);
144        addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstdropfunction);
145        addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstdroptable);
146        addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstdropview);
147
148        addCmd(TBaseType.rrw_explain, ESqlStatementType.sstExplain);
149
150        addCmd(TBaseType.rrw_databricks_fsck, "repair", ESqlStatementType.sstmsckrepairtable);
151
152        // GRANT commands - longer patterns first
153        addCmd(TBaseType.rrw_grant, "select", "on", "share", ESqlStatementType.sstGrant);
154        addCmd(TBaseType.rrw_grant, ESqlStatementType.sstGrant);
155
156        addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert);
157        addCmd(TBaseType.rrw_databricks_list, ESqlStatementType.sstList);
158        addCmd(TBaseType.rrw_load, "data", ESqlStatementType.sstLoadData);
159        addCmd(TBaseType.rrw_merge, "into", ESqlStatementType.sstmerge);
160
161        // MSCK commands - longer patterns first
162        addCmd(TBaseType.rrw_databricks_msck, "repair", "table", ESqlStatementType.sstmsckrepairtable);
163        addCmd(TBaseType.rrw_databricks_msck, "repair", ESqlStatementType.sstmsckrepairtable);
164
165        addCmd(TBaseType.rrw_optimize, ESqlStatementType.sstOptimize);
166
167        addCmd(TBaseType.rrw_refresh, "function", ESqlStatementType.sstRefreshFunction);
168        addCmd(TBaseType.rrw_refresh, "table", ESqlStatementType.sstRefreshTable);
169        addCmd(TBaseType.rrw_refresh, ESqlStatementType.sstRefresh);
170
171        addCmd(TBaseType.rrw_databricks_reorg, "table", ESqlStatementType.sstReorgTable);
172        addCmd(TBaseType.rrw_replace, "table", ESqlStatementType.sstcreatetable);
173        addCmd(TBaseType.rrw_reset, "session", ESqlStatementType.sstResetSession);
174        addCmd(TBaseType.rrw_reset, ESqlStatementType.sstReset);
175        addCmd(TBaseType.rrw_restore, ESqlStatementType.sstRestoreTable);
176
177        // REVOKE commands - longer patterns first
178        addCmd(TBaseType.rrw_revoke, "select", "on", "share", ESqlStatementType.sstRevoke);
179        addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstRevoke);
180
181        addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstrollback);
182        addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect);
183
184        // SET commands - longer patterns first
185        addCmd(TBaseType.rrw_set, "catalog", ESqlStatementType.sstUseCatalog);
186        addCmd(TBaseType.rrw_set, "role", ESqlStatementType.sstset);
187        addCmd(TBaseType.rrw_set, "session", ESqlStatementType.sstset);
188        addCmd(TBaseType.rrw_set, "time", "zone", ESqlStatementType.sstset);
189        addCmd(TBaseType.rrw_set, ESqlStatementType.sstset);
190
191        // SHOW commands - longer patterns first
192        addCmd(TBaseType.rrw_show, "all", "functions", ESqlStatementType.sstShow);
193        addCmd(TBaseType.rrw_show, "all", "in", "share", ESqlStatementType.sstShow);
194        addCmd(TBaseType.rrw_show, "catalogs", ESqlStatementType.sstShow);
195        addCmd(TBaseType.rrw_show, "columns", ESqlStatementType.sstShow);
196        addCmd(TBaseType.rrw_show, "create", "table", ESqlStatementType.sstShow);
197        addCmd(TBaseType.rrw_show, "external", "locations", ESqlStatementType.sstShow);
198        addCmd(TBaseType.rrw_show, "functions", ESqlStatementType.sstShow);
199        addCmd(TBaseType.rrw_show, "grants", "on", "share", ESqlStatementType.sstShow);
200        addCmd(TBaseType.rrw_show, "grants", "to", "recipient", ESqlStatementType.sstShow);
201        addCmd(TBaseType.rrw_show, "grants", ESqlStatementType.sstShow);
202        addCmd(TBaseType.rrw_show, "groups", ESqlStatementType.sstShow);
203        addCmd(TBaseType.rrw_show, "partitions", ESqlStatementType.sstShow);
204        addCmd(TBaseType.rrw_show, "providers", ESqlStatementType.sstShow);
205        addCmd(TBaseType.rrw_show, "recipients", ESqlStatementType.sstShow);
206        addCmd(TBaseType.rrw_show, "schemas", ESqlStatementType.sstShow);
207        addCmd(TBaseType.rrw_show, "shares", ESqlStatementType.sstShow);
208        addCmd(TBaseType.rrw_show, "storage", "credentials", ESqlStatementType.sstShow);
209        addCmd(TBaseType.rrw_show, "system", "functions", ESqlStatementType.sstShow);
210        addCmd(TBaseType.rrw_show, "table", "extended", ESqlStatementType.sstShow);
211        addCmd(TBaseType.rrw_show, "tables", ESqlStatementType.sstShow);
212        addCmd(TBaseType.rrw_show, "tblproperties", ESqlStatementType.sstShow);
213        addCmd(TBaseType.rrw_show, "user", "functions", ESqlStatementType.sstShow);
214        addCmd(TBaseType.rrw_show, "users", ESqlStatementType.sstShow);
215        addCmd(TBaseType.rrw_show, "views", ESqlStatementType.sstShow);
216
217        addCmd(TBaseType.rrw_databricks_sync, "schema", ESqlStatementType.sstsync);
218        addCmd(TBaseType.rrw_databricks_sync, "table", ESqlStatementType.sstsync);
219
220        addCmd(TBaseType.rrw_start, "transaction", ESqlStatementType.sstStartTransaction);
221        addCmd(TBaseType.rrw_truncate, "table", ESqlStatementType.ssttruncatetable);
222        addCmd(TBaseType.rrw_databricks_uncache, "table", ESqlStatementType.sstUnCacheTable);
223        addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate);
224
225        // USE commands - longer patterns first
226        addCmd(TBaseType.rrw_use, "catalog", ESqlStatementType.sstUseCatalog);
227        addCmd(TBaseType.rrw_use, "database", ESqlStatementType.sstUseSchema);
228        addCmd(TBaseType.rrw_use, "schema", ESqlStatementType.sstUseSchema);
229        addCmd(TBaseType.rrw_use, ESqlStatementType.sstUseSchema);
230
231        addCmd(TBaseType.rrw_databricks_vacuum, ESqlStatementType.sstVacuum);
232        addCmd(TBaseType.rrw_values, ESqlStatementType.sstValues);
233        addCmd(TBaseType.rrw_prepare, ESqlStatementType.sstprepare);
234    }
235
236    @Override
237    public TCustomSqlStatement issql(TSourceToken token, EFindSqlStateType state, TCustomSqlStatement currentStatement) {
238        TCustomSqlStatement ret = null;
239        int k;
240        boolean lcisnewsql;
241        TSourceToken lcpprevsolidtoken, lcnextsolidtoken;
242
243        gnewsqlstatementtype = ESqlStatementType.sstinvalid;
244
245        if ((token.tokencode == TBaseType.cmtdoublehyphen)
246                || (token.tokencode == TBaseType.cmtslashstar)
247                || (token.tokencode == TBaseType.lexspace)
248                || (token.tokencode == TBaseType.lexnewline)
249                || (token.tokentype == ETokenType.ttsemicolon)) {
250            return ret;
251        }
252
253        int lcpos = token.posinlist;
254        TSourceTokenList lcsourcetokenlist = token.container;
255        TCustomSqlStatement lccurrentsqlstatement = currentStatement;
256
257        // Subquery after semicolon || at first line
258        if ((state == EFindSqlStateType.stnormal) && (token.tokentype == ETokenType.ttleftparenthesis)) {
259            k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "(");
260            if (k > 0) {
261                ret = new TSelectSqlStatement(vendor);
262            }
263            return ret;
264        }
265
266        // CTE
267        if ((state == EFindSqlStateType.stnormal) && (token.tokencode == TBaseType.rrw_with)) {
268            ret = findcte(token);
269            if ((ret != null)) return ret;
270        }
271
272        gnewsqlstatementtype = getStatementTypeForToken(token);
273
274        TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
275
276        if ((gnewsqlstatementtype == ESqlStatementType.sstinvalid) && (token.tokencode == TBaseType.rrw_create)) {
277            TSourceToken viewToken = token.container.searchToken(TBaseType.rrw_view, "", token, 15);
278            if (viewToken != null) {
279                gnewsqlstatementtype = ESqlStatementType.sstcreateview;
280            }
281        }
282
283        switch (gnewsqlstatementtype) {
284            case sstinvalid: {
285                ret = null;
286                break;
287            }
288            case sstselect: {
289                lcisnewsql = true;
290
291                if (state != EFindSqlStateType.stnormal) {
292                    if (TBaseType.assigned(lcprevsolidtoken)) {
293                        if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis)
294                            lcisnewsql = false; // subquery
295                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union)
296                            lcisnewsql = false;
297                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect)
298                            lcisnewsql = false;
299                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus)
300                            lcisnewsql = false;
301                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except)
302                            lcisnewsql = false;
303                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return)
304                            lcisnewsql = false;
305                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) {
306                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable)
307                                lcisnewsql = false;
308                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview)
309                                lcisnewsql = false;
310                        }
311
312                        if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) {
313                            lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist);
314                            if (TBaseType.assigned(lcpprevsolidtoken)) {
315                                if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union)
316                                    lcisnewsql = false;
317                            }
318                        }
319                    }
320
321                    if (TBaseType.assigned(lccurrentsqlstatement)) {
322                        if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert)
323                            lcisnewsql = false;
324                    }
325                }
326
327                if (lcisnewsql)
328                    ret = new TSelectSqlStatement(vendor);
329                break;
330            }
331            case sstinsert: {
332                lcisnewsql = true;
333                if (state != EFindSqlStateType.stnormal) {
334                    if (TBaseType.assigned(lccurrentsqlstatement)) {
335                    }
336                }
337
338                if (lcisnewsql)
339                    ret = new TInsertSqlStatement(vendor);
340                ret.sqlstatementtype = gnewsqlstatementtype;
341                break;
342            }
343            case sstdelete: {
344                lcisnewsql = true;
345
346                if (state != EFindSqlStateType.stnormal) {
347                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
348                    if (TBaseType.assigned(lcprevsolidtoken)) {
349                        if (lcprevsolidtoken.tokencode == TBaseType.rrw_on)
350                            lcisnewsql = false;
351                    }
352
353                    if (TBaseType.assigned(lccurrentsqlstatement)) {
354                    }
355                }
356
357                if (lcisnewsql)
358                    ret = new TDeleteSqlStatement(vendor);
359                break;
360            }
361            case sstaltertable: {
362                ret = new TAlterTableStatement(vendor);
363                break;
364            }
365            case sstalterfunction: {
366                ret = new TAlterFunctionStmt(vendor);
367                break;
368            }
369            case sstAlterSchema: {
370                ret = new TAlterSchemaStmt(vendor);
371                break;
372            }
373            case sstanalyzeTable: {
374                ret = new TAnalyzeStmt(vendor);
375                break;
376            }
377            case sstcall: {
378                ret = new TCallStatement(vendor);
379                break;
380            }
381            case sstcommit: {
382                ret = new TCommitStmt(vendor);
383                break;
384            }
385            case sstcreatefunction: {
386                ret = new TCreateFunctionStmt(vendor);
387                break;
388            }
389            case sstcreaterole: {
390                ret = new TCreateRoleStmt(vendor);
391                break;
392            }
393            case sstcreateschema: {
394                ret = new TCreateSchemaSqlStatement(vendor);
395                break;
396            }
397            case sstcreatetable: {
398                ret = new TCreateTableSqlStatement(vendor);
399                break;
400            }
401            case sstcreateview: {
402                ret = new TCreateViewSqlStatement(vendor);
403                break;
404            }
405            case sstpostgresqlDeallocate: {
406                ret = new TUnknownSqlStatement(vendor);
407                ret.sqlstatementtype = gnewsqlstatementtype;
408                break;
409            }
410            case sstdropfunction: {
411                ret = new TDropFunctionStmt(vendor);
412                break;
413            }
414            case sstdroprole: {
415                ret = new TDropRoleStmt(vendor);
416                break;
417            }
418            case sstdropschema: {
419                ret = new TDropSchemaSqlStatement(vendor);
420                break;
421            }
422            case sstdroptable: {
423                ret = new TDropTableSqlStatement(vendor);
424                break;
425            }
426            case sstdropview: {
427                ret = new TDropViewSqlStatement(vendor);
428                break;
429            }
430            case sstExecute: {
431                ret = new TExecuteSqlStatement(vendor);
432                break;
433            }
434            case sstExplain: {
435                ret = new TExplainPlan(vendor);
436                break;
437            }
438            case sstGrant: {
439                ret = new TGrantStmt(vendor);
440                break;
441            }
442            case sstprepare: {
443                ret = new TPrepareStmt(vendor);
444                break;
445            }
446            case sstset:
447            case sstReset: {
448                lcisnewsql = true;
449                if (state != EFindSqlStateType.stnormal) {
450                    if (TBaseType.assigned(lccurrentsqlstatement)) {
451                        lcisnewsql = false;
452                    }
453                }
454
455                if (lcisnewsql) {
456                    ret = new TSetStmt(vendor);
457                }
458                break;
459            }
460            case sstShow: {
461                ret = new TShowStmt(vendor);
462                ret.sqlstatementtype = gnewsqlstatementtype;
463                break;
464            }
465            case sstStartTransaction: {
466                ret = new TStartTransactionStmt(vendor);
467                break;
468            }
469            case sstValues: {
470                ret = new TSelectSqlStatement(vendor);
471                break;
472            }
473            case sstResetSession: {
474                ret = new TResetSessionStmt(vendor);
475                break;
476            }
477            case sstCreateExternallocation:
478                ret = new TCreateExternalLocationStmt(vendor);
479                break;
480            case sstList: {
481                ret = new TListStmt(vendor);
482                break;
483            }
484            case sstRevoke:
485                ret = new TRevokeStmt(vendor);
486                break;
487            case sstaltercredental:
488                ret = new TAlterCredentialStmt(vendor);
489                break;
490            case sstdescribeCatalog:
491            case sstdescribeFunction:
492            case sstdescribeProvider:
493            case sstdescribeQuery:
494            case sstdescribeRecipient:
495            case sstdescribeSchema:
496            case sstdescribeShare:
497            case sstdescribeTable:
498            case sstdescribeDatabase:
499            case sstdescribeLocation:
500            case sstdescribeCredential:
501            case sstdescribe:
502                ret = new TDescribeStmt(vendor);
503                break;
504            case sstUseCatalog:
505            case sstUseSchema:
506            case sstUseDatabase:
507            case sstUse:
508                ret = new TUseDatabase(vendor);
509                break;
510            case sstAnalyzeTable:
511                ret = new TAnalyzeStmt(vendor);
512                break;
513            case sstCreategroup:
514                ret = new TCreateGroup(vendor);
515                break;
516            case sstAlterGroup:
517                ret = new TAlterGroup(vendor);
518                break;
519            case sstDeny:
520                ret = new TDenyStmt(vendor);
521                break;
522            case sstDropGroup:
523                ret = new TDropGroup(vendor);
524                break;
525            case sstmsckrepairtable:
526                ret = new TMSCKStmt(vendor);
527                break;
528            case sstcreatecatalog:
529                ret = new TCreateCatalogStmt(vendor);
530                break;
531            case sstConvertToDelta:
532                ret = new TConvertToDeltaStmt(vendor);
533                break;
534            case sstOptimize:
535                ret = new TOptimizeStmt(vendor);
536                break;
537            case sstRestoreTable:
538                ret = new TRestoreTableStmt(vendor);
539                break;
540            case sstReorgTable:
541                ret = new TReorgTableStmt(vendor);
542                break;
543            case sstVacuum:
544                ret = new TVacuumStmt(vendor);
545                break;
546            case sstmerge:
547                ret = new TMergeSqlStatement(vendor);
548                break;
549            default: {
550                ret = new TUnknownSqlStatement(vendor);
551                ret.sqlstatementtype = gnewsqlstatementtype;
552                break;
553            }
554        }
555
556        return ret;
557    }
558}