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