001package gudusoft.gsqlparser.sqlcmds;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.stmt.*;
005import gudusoft.gsqlparser.stmt.oracle.*;
006import gudusoft.gsqlparser.stmt.vertica.*;
007
008/**
009 * Vertica SQL command resolver.
010 * Contains all Vertica-specific SQL command recognition logic.
011 *
012 * @since 3.1.0.9
013 */
014public class TSqlCmdsVertica extends AbstractSqlCmds {
015
016    // Temporary field for statement type during issql processing
017    private ESqlStatementType gnewsqlstatementtype = ESqlStatementType.sstinvalid;
018
019    public TSqlCmdsVertica() {
020        super(EDbVendor.dbvvertica);
021    }
022
023    @Override
024    protected void initializeCommands() {
025        // Vertica commands
026        addCmd(TBaseType.rrw_vertica_activate, "directed", "query", ESqlStatementType.sstActivateDirectedQuery);
027
028        addCmd(TBaseType.rrw_alter, "access", "policy", ESqlStatementType.sstAlterAccessPolicy);
029        addCmd(TBaseType.rrw_alter, "authentication", ESqlStatementType.sstAlterAuthentication);
030        addCmd(TBaseType.rrw_alter, "database", ESqlStatementType.sstalterdatabase);
031        addCmd(TBaseType.rrw_alter, "fault", "group", ESqlStatementType.sstAlterFaultGroup);
032        addCmd(TBaseType.rrw_alter, "function", ESqlStatementType.sstalterfunction);
033        addCmd(TBaseType.rrw_alter, "library", ESqlStatementType.sstAlterLibrary);
034        addCmd(TBaseType.rrw_alter, "node", ESqlStatementType.sstAlterNode);
035        addCmd(TBaseType.rrw_alter, "network", "interface", ESqlStatementType.sstAlterNetworkInterface);
036        addCmd(TBaseType.rrw_alter, "projection", ESqlStatementType.sstAlterProjection);
037        addCmd(TBaseType.rrw_alter, "profile", ESqlStatementType.sstAlterProfile);
038        addCmd(TBaseType.rrw_alter, "resource", "pool", ESqlStatementType.sstAlterResourcePool);
039        addCmd(TBaseType.rrw_alter, "role", ESqlStatementType.sstAlterRole);
040        addCmd(TBaseType.rrw_alter, "schema", ESqlStatementType.sstAlterSchema);
041        addCmd(TBaseType.rrw_alter, "sequence", ESqlStatementType.sstaltersequence);
042        addCmd(TBaseType.rrw_alter, "session", ESqlStatementType.sstaltersession);
043        addCmd(TBaseType.rrw_alter, "subnet", ESqlStatementType.sstAlterSubnet);
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
048        addCmd(TBaseType.rrw_begin, ESqlStatementType.sstBegin);
049        addCmd(TBaseType.rrw_call, ESqlStatementType.sstcall);
050
051        addCmd(TBaseType.rrw_comment, "on", ESqlStatementType.sstCommentOn);
052        addCmd(TBaseType.rrw_commit, ESqlStatementType.sstcommit);
053        addCmd(TBaseType.rrw_connect, "to", ESqlStatementType.sstconnect);
054        addCmd(TBaseType.rrw_vertica_copy, ESqlStatementType.sstCopy);
055
056        addCmd(TBaseType.rrw_create, "access", "policy", ESqlStatementType.sstCreateAccessPolicy);
057        addCmd(TBaseType.rrw_create, "aggregate", "function", ESqlStatementType.sstcreatefunction);
058        addCmd(TBaseType.rrw_create, "analytic", "function", ESqlStatementType.sstcreatefunction);
059        addCmd(TBaseType.rrw_create, "authentication", ESqlStatementType.sstCreateAuthentication);
060        addCmd(TBaseType.rrw_create, "directed", "query", ESqlStatementType.sstCreateDirectedQuery);
061        addCmd(TBaseType.rrw_create, "external", "table", ESqlStatementType.sstCreateExternalTable);
062        addCmd(TBaseType.rrw_create, "fault", "group", ESqlStatementType.sstCreateFaultGroup);
063        addCmd(TBaseType.rrw_create, "filter", ESqlStatementType.sstcreatefunction);
064        addCmd(TBaseType.rrw_create, "flex", "table", ESqlStatementType.sstcreatetable);
065        addCmd(TBaseType.rrw_create, "flexible", "table", ESqlStatementType.sstcreatetable);
066
067        addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstcreatefunction);
068        addCmd(TBaseType.rrw_create, "global", "temp", "table", ESqlStatementType.sstcreatetable);
069        addCmd(TBaseType.rrw_create, "global", "temporary", "table", ESqlStatementType.sstcreatetable);
070        addCmd(TBaseType.rrw_create, "hcatalog", "schema", ESqlStatementType.sstCreateHCatalogSchema);
071        addCmd(TBaseType.rrw_create, "library", ESqlStatementType.sstCreateLibrary);
072        addCmd(TBaseType.rrw_create, "local", "temp", "table", ESqlStatementType.sstcreatetable);
073        addCmd(TBaseType.rrw_create, "local", "temp", "view", ESqlStatementType.sstcreateview);
074        addCmd(TBaseType.rrw_create, "local", "temporary", "table", ESqlStatementType.sstcreatetable);
075        addCmd(TBaseType.rrw_create, "local", "temporary", "view", ESqlStatementType.sstcreateview);
076        addCmd(TBaseType.rrw_create, "location", ESqlStatementType.sstCreateLocation);
077        addCmd(TBaseType.rrw_create, "managed", "external", "table", ESqlStatementType.sstcreatetable);
078        addCmd(TBaseType.rrw_create, "network", "interface", ESqlStatementType.sstCreateNetworkInterface);
079        addCmd(TBaseType.rrw_create, "or", "replace", "aggregate", "function", ESqlStatementType.sstcreatefunction);
080        addCmd(TBaseType.rrw_create, "or", "replace", "function", ESqlStatementType.sstcreatefunction);
081        addCmd(TBaseType.rrw_create, "or", "replace", "library", ESqlStatementType.sstCreateLibrary);
082        addCmd(TBaseType.rrw_create, "or", "replace", "local", "temp", "view", ESqlStatementType.sstcreateview);
083        addCmd(TBaseType.rrw_create, "or", "replace", "local", "temporary", "view", ESqlStatementType.sstcreateview);
084        addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstcreateview);
085        addCmd(TBaseType.rrw_create, "or", "replace", "procedure", ESqlStatementType.sstcreateprocedure);
086
087        addCmd(TBaseType.rrw_create, "parser", ESqlStatementType.sstcreatefunction);
088        addCmd(TBaseType.rrw_create, "procedure", ESqlStatementType.sstcreateprocedure);
089        addCmd(TBaseType.rrw_create, "profile", ESqlStatementType.sstCreateProfile);
090        addCmd(TBaseType.rrw_create, "projection", ESqlStatementType.sstCreateProjection);
091        addCmd(TBaseType.rrw_create, "resource", "pool", ESqlStatementType.sstCreateResourcePool);
092        addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstcreaterole);
093        addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstcreateschema);
094        addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstcreatesequence);
095        addCmd(TBaseType.rrw_create, "source", ESqlStatementType.sstcreatefunction);
096        addCmd(TBaseType.rrw_create, "subnet", ESqlStatementType.sstCreateSubnet);
097
098        addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable);
099        addCmd(TBaseType.rrw_create, "temp", "table", ESqlStatementType.sstcreatetable);
100        addCmd(TBaseType.rrw_create, "temporary", "table", ESqlStatementType.sstcreatetable);
101        addCmd(TBaseType.rrw_create, "text", "index", ESqlStatementType.sstcreateindex);
102        addCmd(TBaseType.rrw_create, "transform", "function", ESqlStatementType.sstcreatefunction);
103        addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstcreateuser);
104        addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstcreateview);
105
106        addCmd(TBaseType.rrw_vertica_deactivate, "directed", "query", ESqlStatementType.sstDeActivateDirectedQuery);
107
108        addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete);
109        addCmd(TBaseType.rrw_disconnect, ESqlStatementType.sstDisconnect);
110
111        addCmd(TBaseType.rrw_drop, "directed", "query", ESqlStatementType.sstDeActivateDirectedQuery);
112        addCmd(TBaseType.rrw_drop, "access", "policy", ESqlStatementType.sstDropAccessPolicy);
113        addCmd(TBaseType.rrw_drop, "aggregate", "function", ESqlStatementType.sstDropAggregateFunction);
114        addCmd(TBaseType.rrw_drop, "authentication", ESqlStatementType.sstDropAuthentication);
115
116        addCmd(TBaseType.rrw_drop, "fault", "group", ESqlStatementType.sstDropFaultGroup);
117
118        addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstdropfunction);
119        addCmd(TBaseType.rrw_drop, "library", ESqlStatementType.sstDropLibrary);
120        addCmd(TBaseType.rrw_drop, "network", "interface", ESqlStatementType.sstDropNetworkInterface);
121        addCmd(TBaseType.rrw_drop, "procedure", ESqlStatementType.sstdropprocedure);
122        addCmd(TBaseType.rrw_drop, "profile", ESqlStatementType.sstDropProfile);
123        addCmd(TBaseType.rrw_drop, "projection", ESqlStatementType.sstDropProjection);
124        addCmd(TBaseType.rrw_drop, "resource", "pool", ESqlStatementType.sstDropResourcePool);
125        addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstdroprole);
126        addCmd(TBaseType.rrw_drop, "schema", ESqlStatementType.sstdropschema);
127        addCmd(TBaseType.rrw_drop, "sequence", ESqlStatementType.sstdropsequence);
128        addCmd(TBaseType.rrw_drop, "subnet", ESqlStatementType.sstDropSubnet);
129        addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstdroptable);
130        addCmd(TBaseType.rrw_drop, "text", "index", ESqlStatementType.sstDropTextIndex);
131        addCmd(TBaseType.rrw_drop, "transform", "function", ESqlStatementType.sstDropTransformFunction);
132        addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstdropuser);
133        addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstdropview);
134
135        addCmd(TBaseType.rrw_end, ESqlStatementType.sstEnd);
136        addCmd(TBaseType.rrw_explain, ESqlStatementType.sstExplain);
137        addCmd(TBaseType.rrw_vertica_export, "to", "vertica", ESqlStatementType.sstExportToVertica);
138        addCmd(TBaseType.rrw_grant, ESqlStatementType.sstGrant);
139        addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert);
140        addCmd(TBaseType.rrw_merge, ESqlStatementType.sstmerge);
141        addCmd(TBaseType.rrw_vertica_profile, ESqlStatementType.sstProfile);
142        addCmd(TBaseType.rrw_release, ESqlStatementType.sstReleaseSavepoint);
143        addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstRevoke);
144        addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstrollback);
145        addCmd(TBaseType.rrw_savepoint, ESqlStatementType.sstsavepoint);
146        addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect);
147        addCmd(TBaseType.rrw_set, "datestyle", "to", ESqlStatementType.sstset);
148        addCmd(TBaseType.rrw_set, "escape_string_warning", "to", ESqlStatementType.sstset);
149        addCmd(TBaseType.rrw_set, "intervalstyle", "to", ESqlStatementType.sstset);
150        addCmd(TBaseType.rrw_set, "locale", ESqlStatementType.sstset);
151        addCmd(TBaseType.rrw_set, "role", ESqlStatementType.sstset);
152        addCmd(TBaseType.rrw_set, "search_path", ESqlStatementType.sstset);
153        addCmd(TBaseType.rrw_set, "session", ESqlStatementType.sstset);
154        addCmd(TBaseType.rrw_set, "standard_conforming_strings", ESqlStatementType.sstset);
155        addCmd(TBaseType.rrw_set, "time", "zone", ESqlStatementType.sstset);
156        addCmd(TBaseType.rrw_show, ESqlStatementType.sstShow);
157        addCmd(TBaseType.rrw_start, ESqlStatementType.sstStartTransaction);
158        addCmd(TBaseType.rrw_truncate, "table", ESqlStatementType.sstTruncate);
159        addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate);
160    }
161
162    @Override
163    public TCustomSqlStatement issql(TSourceToken token, EFindSqlStateType state, TCustomSqlStatement currentStatement) {
164        TCustomSqlStatement ret = null;
165
166        gnewsqlstatementtype = ESqlStatementType.sstinvalid;
167
168        if ((token.tokencode == TBaseType.cmtdoublehyphen)
169                || (token.tokencode == TBaseType.cmtslashstar)
170                || (token.tokencode == TBaseType.lexspace)
171                || (token.tokencode == TBaseType.lexnewline)
172                || (token.tokentype == ETokenType.ttsemicolon)) {
173            return null;
174        }
175
176        int lcpos = token.posinlist;
177        TSourceTokenList lcsourcetokenlist = token.container;
178        TCustomSqlStatement lccurrentsqlstatement = currentStatement;
179
180        //subquery after semicolon or at first line
181        if ((state == EFindSqlStateType.stnormal) && (token.tokentype == ETokenType.ttleftparenthesis)) {
182            int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "(");
183            if (k > 0) {
184                ret = new TSelectSqlStatement(this.vendor);
185            }
186
187            return ret;
188        }
189
190        //cte
191        if ((state == EFindSqlStateType.stnormal) && (token.tokencode == TBaseType.rrw_with)) {
192            ret = findcte(token);
193            if ((ret != null)) return ret;
194        }
195
196        gnewsqlstatementtype = getStatementTypeForToken(token);
197
198        TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
199        switch (gnewsqlstatementtype) {
200            case sstinvalid: {
201                ret = null;
202
203                if (state == EFindSqlStateType.stnormal) {
204                    if (token.tokencode == TBaseType.label_begin) {
205                        ret = new TCommonBlock(this.vendor);
206                        gnewsqlstatementtype = ret.sqlstatementtype;
207                    } else if (token.tokencode == TBaseType.rrw_declare) {
208                        ret = new TCommonBlock(this.vendor);
209                        gnewsqlstatementtype = ret.sqlstatementtype;
210                    } else if (token.tokencode == TBaseType.rrw_begin) {
211                        ret = new TCommonBlock(this.vendor);
212                        gnewsqlstatementtype = ret.sqlstatementtype;
213                    } else if (token.tokencode == TBaseType.rrw_procedure) {
214                        ret = new TPlsqlCreateProcedure(this.vendor);
215                        gnewsqlstatementtype = ret.sqlstatementtype;
216                    } else if (token.tokencode == TBaseType.rrw_function) {
217                        ret = new TPlsqlCreateFunction(this.vendor);
218                        gnewsqlstatementtype = ret.sqlstatementtype;
219                    } else if (token.tokencode == TBaseType.rrw_package) {
220                        ret = new TPlsqlCreatePackage(this.vendor);
221                        gnewsqlstatementtype = ret.sqlstatementtype;
222                    }
223                }
224                break;
225            }
226            case sstselect: {
227                boolean lcisnewsql = true;
228
229                if (state != EFindSqlStateType.stnormal) {
230                    if ((lcprevsolidtoken != null)) {
231                        if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis)
232                            lcisnewsql = false; //subquery
233                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union)
234                            lcisnewsql = false;
235                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect)
236                            lcisnewsql = false;
237                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus)
238                            lcisnewsql = false;
239                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except)
240                            lcisnewsql = false;
241                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return)
242                            lcisnewsql = false;
243                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) {
244                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable)
245                                lcisnewsql = false;
246                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview)
247                                lcisnewsql = false;
248                        }
249
250                        if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) {
251                            TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist);
252                            if ((lcpprevsolidtoken != null)) {
253                                if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union)
254                                    lcisnewsql = false;
255                            }
256                        }
257
258                    }
259
260
261                    if ((lccurrentsqlstatement != null)) {
262                        if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert)
263                            lcisnewsql = false;
264                    }
265
266                }
267
268                if (lcisnewsql)
269                    ret = new TSelectSqlStatement(this.vendor);
270
271                break;
272            }
273            case sstinsert: {
274                boolean lcisnewsql = true;
275                if (state != EFindSqlStateType.stnormal) {
276                    if ((lccurrentsqlstatement != null)) {
277
278                    }
279                }
280
281                if (lcisnewsql)
282                    ret = new TInsertSqlStatement(this.vendor);
283
284                break;
285            }
286            case sstupdate: {
287                boolean lcisnewsql = true;
288                if (state != EFindSqlStateType.stnormal) {
289                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
290                    if ((lcprevsolidtoken != null)) {
291                        if (lcprevsolidtoken.tokencode == TBaseType.rrw_on)
292                            lcisnewsql = false;
293                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for)
294                            lcisnewsql = false;
295                    }
296
297                    TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false);
298                    if ((lcnextsolidtoken != null)) {
299                        if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) {
300                            int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "(");
301                            if (k == 0) lcisnewsql = false;
302                        }
303                    }
304
305
306                    if ((lccurrentsqlstatement != null)) {
307                    }
308                }
309
310                if (lcisnewsql) {
311                    ret = new TUpdateSqlStatement(this.vendor);
312                    ret.dummytag = 1; // means set clause in update is not found yet, used to separate set clause from set statement
313                }
314                break;
315            }
316            case sstdelete: {
317                boolean lcisnewsql = true;
318
319                if (state != EFindSqlStateType.stnormal) {
320                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
321                    if ((lcprevsolidtoken != null)) {
322                        if (lcprevsolidtoken.tokencode == TBaseType.rrw_on)
323                            lcisnewsql = false;
324                    }
325
326                    if ((lccurrentsqlstatement != null)) {
327                    }
328                }
329
330                if (lcisnewsql)
331                    ret = new TDeleteSqlStatement(this.vendor);
332
333                break;
334            }
335            case sstmerge: {
336                ret = new TMergeSqlStatement(this.vendor);
337                ret.sqlstatementtype = gnewsqlstatementtype;
338                break;
339            }
340            case sstcommit:
341            case sstEnd: {
342                ret = new TCommitStmt(this.vendor);
343                ret.sqlstatementtype = gnewsqlstatementtype;
344                break;
345            }
346            case sstrollback: {
347                ret = new TRollbackStmt(this.vendor);
348                ret.sqlstatementtype = gnewsqlstatementtype;
349                break;
350            }
351            case sstsavepoint: {
352                ret = new TSavepointStmt(this.vendor);
353                ret.sqlstatementtype = gnewsqlstatementtype;
354                break;
355            }
356            case sstRevoke: {
357                ret = new TRevokeStmt(this.vendor);
358                ret.sqlstatementtype = gnewsqlstatementtype;
359                break;
360            }
361            case sstGrant: {
362                ret = new TGrantStmt(this.vendor);
363                ret.sqlstatementtype = gnewsqlstatementtype;
364                break;
365            }
366            case sstTruncate: {
367                ret = new TTruncateStatement(this.vendor);
368                ret.sqlstatementtype = gnewsqlstatementtype;
369                break;
370            }
371            case sstcreatetable: {
372                ret = new TCreateTableSqlStatement(this.vendor);
373                break;
374            }
375            case sstcreateview: {
376                ret = new TCreateViewSqlStatement(this.vendor);
377                break;
378            }
379            case sstcreateindex: {
380                ret = new TCreateIndexSqlStatement(this.vendor);
381                break;
382            }
383            case sstcreatedatabase: {
384                ret = new TCreateDatabaseSqlStatement(this.vendor);
385                break;
386            }
387            case sstdroptable: {
388                ret = new TDropTableSqlStatement(this.vendor);
389                break;
390            }
391            case sstdropview: {
392                ret = new TDropViewSqlStatement(this.vendor);
393                break;
394            }
395            case sstdropindex: {
396                ret = new TDropIndexSqlStatement(this.vendor);
397                break;
398            }
399            case sstaltertable: {
400                ret = new TAlterTableStatement(this.vendor);
401                break;
402            }
403            case sstaltersession: {
404                ret = new TAlterSessionStatement(this.vendor);
405                break;
406            }
407            case sstcreateprocedure: {
408                ret = new TCreateProcedureStmt(this.vendor);
409                break;
410            }
411            case sstCommentOn: {
412                ret = new TCommentOnSqlStmt(this.vendor);
413                break;
414            }
415            case sstcreatesequence: {
416                ret = new TCreateSequenceStmt(this.vendor);
417                break;
418            }
419            case sstcreatefunction:
420                ret = new TVerticaCreateFunction(this.vendor);
421                break;
422            case sstaltersequence:
423                ret = new TAlterSequenceStatement(this.vendor);
424                break;
425            case sstAlterAccessPolicy:
426                ret = new TAlterAccessPolicy(this.vendor);
427                break;
428            case sstAlterAuthentication:
429                ret = new TAlterAuthentication(this.vendor);
430                break;
431            case sstalterdatabase:
432                ret = new TAlterDatabaseStmt(this.vendor);
433                break;
434            case sstAlterFaultGroup:
435                ret = new TAlterFaultGroup(this.vendor);
436                break;
437            case sstalterfunction:
438                ret = new TAlterFunctionStmt(this.vendor);
439                break;
440            case sstAlterLibrary:
441                ret = new TAlterLibraryStmt(this.vendor);
442                break;
443            case sstAlterNode:
444                ret = new TAlterNode(this.vendor);
445                break;
446            case sstAlterNetworkInterface:
447                ret = new TAlterNetworkInterface(this.vendor);
448                break;
449            case sstAlterProjection:
450                ret = new TAlterProjectionRename(this.vendor);
451                break;
452            case sstAlterProfile:
453                ret = new TAlterProfile(this.vendor);
454                break;
455            case sstAlterResourcePool:
456                ret = new TAlterResourcePool(this.vendor);
457                break;
458            case sstAlterRole:
459                ret = new TAlterRoleStmt(this.vendor);
460                break;
461            case sstAlterSchema:
462                ret = new TAlterSchemaStmt(this.vendor);
463                break;
464            case sstAlterSubnet:
465                ret = new TAlterSubnet(this.vendor);
466                break;
467            case sstBegin:
468            case sstStartTransaction:
469                ret = new TBeginTran(this.vendor);
470                break;
471            case sstReleaseSavepoint:
472                ret = new TReleaseSavepointStmt(this.vendor);
473                break;
474            case sstconnect:
475                ret = new TConnectStmt(this.vendor);
476                break;
477            case sstCreateAccessPolicy:
478                ret = new TCreateAccessPolicy(this.vendor);
479                break;
480            case sstCreateAuthentication:
481                ret = new TCreateAuthentication(this.vendor);
482                break;
483            case sstCreateFaultGroup:
484                ret = new TCreateFaultGroup(this.vendor);
485                break;
486            case sstCreateHCatalogSchema:
487                ret = new TCreateHCatalogSchema(this.vendor);
488                break;
489            case sstCreateSubnet:
490                ret = new TCreateSubnet(this.vendor);
491                break;
492            case sstcreateuser:
493                ret = new TCreateUserStmt(this.vendor);
494                break;
495            case sstDisconnect:
496                ret = new TDisconnectStmt(this.vendor);
497                break;
498            case sstDropAccessPolicy:
499                ret = new TDropAccessPolicy(this.vendor);
500                break;
501            case sstDropAggregateFunction:
502                ret = new TDropAggregateFunction(this.vendor);
503                break;
504            case sstDropAuthentication:
505                ret = new TDropAuthentication(this.vendor);
506                break;
507            case sstDropFaultGroup:
508                ret = new TDropFaultGroup(this.vendor);
509                break;
510            case sstdropfunction:
511                ret = new TDropFunctionStmt(this.vendor);
512                break;
513            case sstDropLibrary:
514                ret = new TDropLibraryStmt(this.vendor);
515                break;
516            case sstDropNetworkInterface:
517                ret = new TDropNetworkInterface(this.vendor);
518                break;
519            case sstdropprocedure:
520                ret = new TDropProcedureStmt(this.vendor);
521                break;
522            case sstDropProjection:
523                ret = new TDropProjectionStmt(this.vendor);
524                break;
525            case sstDropResourcePool:
526                ret = new TDropResourcePool(this.vendor);
527                break;
528            case sstdroprole:
529                ret = new TDropRoleStmt(this.vendor);
530                break;
531            case sstdropschema:
532                ret = new TDropSchemaSqlStatement(this.vendor);
533                break;
534            case sstdropsequence:
535                ret = new TDropSequenceStmt(this.vendor);
536                break;
537            case sstDropSubnet:
538                ret = new TDropSubnet(this.vendor);
539                break;
540            case sstDropTextIndex:
541                ret = new TDropTextIndex(this.vendor);
542                break;
543            case sstDropTransformFunction:
544                ret = new TDropTransformFunction(this.vendor);
545                break;
546            case sstdropuser:
547                ret = new TDropUserStmt(this.vendor);
548                break;
549            case sstExplain: {
550                ret = new TExplainPlan(this.vendor);
551                break;
552            }
553            case sstExportToVertica:
554                ret = new TExportToVertica(this.vendor);
555                break;
556            case sstProfile:
557                ret = new TProfileStmt(this.vendor);
558                break;
559            case sstset:
560                ret = new TVerticaSetStmt(this.vendor);
561                break;
562            case sstShow:
563                ret = new TVerticaShow(this.vendor);
564                break;
565            case sstcall:
566                ret = new TCallStatement(this.vendor);
567                break;
568            default: {
569                ret = new TUnknownSqlStatement(this.vendor);
570                ret.sqlstatementtype = gnewsqlstatementtype;
571                break;
572            }
573        }
574
575        return ret;
576    }
577}