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