001package gudusoft.gsqlparser.sqlcmds;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.stmt.*;
005import gudusoft.gsqlparser.stmt.oracle.*;
006import gudusoft.gsqlparser.stmt.postgresql.*;
007
008/**
009 * Greenplum SQL command resolver.
010 * Extracted from TSqlCmds monolith for modular architecture.
011 *
012 * @since 3.1.0.9
013 */
014public class TSqlCmdsGreenplum extends AbstractSqlCmds {
015
016    public TSqlCmdsGreenplum() {
017        super(EDbVendor.dbvgreenplum);
018    }
019
020    @Override
021    protected void initializeCommands() {
022        // Commands must be sorted alphabetically
023        // Extracted from TSqlCmds.initgreenplumcmds()
024
025        addCmd(TBaseType.rrw_abort, ESqlStatementType.sstpostgresqlabort);
026        addCmd(TBaseType.rrw_alter, "aggregate", ESqlStatementType.sstpostgresqlAlterAggregate);
027        addCmd(TBaseType.rrw_alter, "collation", ESqlStatementType.sstpostgresqlAlterCollation);
028        addCmd(TBaseType.rrw_alter, "default", "privileges", ESqlStatementType.sstpostgresqlAlterDefaultPrivileges);
029        addCmd(TBaseType.rrw_alter, "extension", ESqlStatementType.sstpostgresqlAlterExtension);
030        addCmd(TBaseType.rrw_alter, "foreign", "data", "wrapper", ESqlStatementType.sstpostgresqlAlterForeignDataWrapper);
031        addCmd(TBaseType.rrw_alter, "foreign", "table", ESqlStatementType.sstpostgresqlAlterForeignTable);
032        addCmd(TBaseType.rrw_alter, "materialized", "view", ESqlStatementType.sstpostgresqlAlterMaterializedView);
033        addCmd(TBaseType.rrw_alter, "resource", "group", ESqlStatementType.sstgreenplumAlterResourceGroup);
034        addCmd(TBaseType.rrw_alter, "server", ESqlStatementType.sstpostgresqlAlterServer);
035        addCmd(TBaseType.rrw_alter, "text", "search", "configuration", ESqlStatementType.sstpostgresqlAlterTextSearchConfiguration);
036        addCmd(TBaseType.rrw_alter, "text", "search", "dictionary", ESqlStatementType.sstpostgresqlAlterTextSearchDictionary);
037        addCmd(TBaseType.rrw_alter, "text", "search", "parser", ESqlStatementType.sstpostgresqlAlterTextSearchParser);
038        addCmd(TBaseType.rrw_alter, "text", "search", "template", ESqlStatementType.sstpostgresqlAlterTextSearchTemplate);
039        addCmd(TBaseType.rrw_alter, "view", ESqlStatementType.sstpostgresqlAlterView);
040        addCmd(TBaseType.rrw_alter, "conversion", ESqlStatementType.sstpostgresqlAlterConversion);
041        addCmd(TBaseType.rrw_alter, "database", ESqlStatementType.sstpostgresqlalterdatabase);
042        addCmd(TBaseType.rrw_alter, "domain", ESqlStatementType.sstpostgresqlAlterDomain);
043
044        addCmd(TBaseType.rrw_alter, "external", "table", ESqlStatementType.sstgreenplumAlterExternalTable);
045        addCmd(TBaseType.rrw_alter, "filespace", ESqlStatementType.sstgreenplumAlterFilespace);
046
047        addCmd(TBaseType.rrw_alter, "function", ESqlStatementType.sstpostgresqlAlterfunction);
048        addCmd(TBaseType.rrw_alter, "group", ESqlStatementType.sstpostgresqlAlterGroup);
049        addCmd(TBaseType.rrw_alter, "index", ESqlStatementType.sstpostgresqlAlterIndex);
050        addCmd(TBaseType.rrw_alter, "language", ESqlStatementType.sstpostgresqlAlterLanguage);
051        addCmd(TBaseType.rrw_alter, "operator", "class", ESqlStatementType.sstpostgresqlAlterOperatorClass);
052        addCmd(TBaseType.rrw_alter, "operator", ESqlStatementType.sstpostgresqlAlterOperator);
053        addCmd(TBaseType.rrw_alter, "protocol", ESqlStatementType.sstgreenplumAlterProtocol);
054        addCmd(TBaseType.rrw_alter, "resource", "queue", ESqlStatementType.sstgreenplumAlterResourceQueue);
055        addCmd(TBaseType.rrw_alter, "role", ESqlStatementType.sstpostgresqlAlterRole);
056        addCmd(TBaseType.rrw_alter, "schema", ESqlStatementType.sstpostgresqlAlterSchema);
057        addCmd(TBaseType.rrw_alter, "sequence", ESqlStatementType.sstpostgresqlAlterSequence);
058        addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstaltertable);
059        addCmd(TBaseType.rrw_alter, "tablespace", ESqlStatementType.sstpostgresqlAlterTablespace);
060
061        addCmd(TBaseType.rrw_alter, "trigger", ESqlStatementType.sstpostgresqlAlterTrigger);
062
063        addCmd(TBaseType.rrw_alter, "type", ESqlStatementType.sstpostgresqlAlterType);
064        addCmd(TBaseType.rrw_alter, "user", ESqlStatementType.sstpostgresqlAlterUser);
065        addCmd(TBaseType.rrw_greenplum_analyse, ESqlStatementType.sstpostgresqlAnalyze);
066        addCmd(TBaseType.rrw_analyze, ESqlStatementType.sstpostgresqlAnalyze);
067
068        addCmd(TBaseType.rrw_begin, ESqlStatementType.sstpostgresqlBegin);
069        addCmd(TBaseType.rrw_call, ESqlStatementType.sstcall);
070
071        addCmd(TBaseType.rrw_checkpoint, ESqlStatementType.sstpostgresqlCheckpoint);
072        addCmd(TBaseType.rrw_close, ESqlStatementType.sstpostgresqlClose);
073
074        addCmd(TBaseType.rrw_greenplum_cluster, ESqlStatementType.sstpostgresqlCluster);
075
076        addCmd(TBaseType.rrw_comment, "on", ESqlStatementType.sstpostgresqlComment);
077
078        addCmd(TBaseType.rrw_commit, ESqlStatementType.sstpostgresqlCommit);
079        addCmd(TBaseType.rrw_greenplum_copy, ESqlStatementType.sstpostgresqlCopy);
080
081        addCmd(TBaseType.rrw_create, "aggregate", ESqlStatementType.sstpostgresqlCreateAggregate);
082        addCmd(TBaseType.rrw_create, "cast", ESqlStatementType.sstpostgresqlCreateCast);
083
084        addCmd(TBaseType.rrw_create, "constraint", "trigger", ESqlStatementType.sstcreatetrigger);
085
086        addCmd(TBaseType.rrw_create, "conversion", ESqlStatementType.sstpostgresqlConversion);
087        addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstpostgresqlCreateDatabase);
088        addCmd(TBaseType.rrw_create, "domain", ESqlStatementType.sstpostgresqlCreateDomain);
089        addCmd(TBaseType.rrw_create, "extension", ESqlStatementType.sstcreateExtension);
090        addCmd(TBaseType.rrw_create, "collation", ESqlStatementType.sstpostgresqlCreateCollation);
091        addCmd(TBaseType.rrw_create, "foreign", "data", "wrapper", ESqlStatementType.sstpostgresqlCreateForeignDataWrapper);
092        addCmd(TBaseType.rrw_create, "foreign", "table", ESqlStatementType.sstpostgresqlCreateForeignTable);
093        addCmd(TBaseType.rrw_create, "resource", "group", ESqlStatementType.sstgreenplumCreateResourceGroup);
094        addCmd(TBaseType.rrw_create, "server", ESqlStatementType.sstpostgresqlCreateServer);
095        addCmd(TBaseType.rrw_create, "text", "search", "configuration", ESqlStatementType.sstpostgresqlCreateTextSearchConfiguration);
096        addCmd(TBaseType.rrw_create, "text", "search", "dictionary", ESqlStatementType.sstpostgresqlCreateTextSearchDictionary);
097        addCmd(TBaseType.rrw_create, "text", "search", "parser", ESqlStatementType.sstpostgresqlCreateTextSearchParser);
098        addCmd(TBaseType.rrw_create, "text", "search", "template", ESqlStatementType.sstpostgresqlCreateTextSearchTemplate);
099        addCmd(TBaseType.rrw_create, "recursive", "view", ESqlStatementType.sstpostgresqlCreateView);
100        addCmd(TBaseType.rrw_create, "or", "replace", "recursive", "view", ESqlStatementType.sstpostgresqlCreateView);
101
102        addCmd(TBaseType.rrw_create, "external", "web", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
103        addCmd(TBaseType.rrw_create, "external", "web", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
104        addCmd(TBaseType.rrw_create, "external", "web", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
105        addCmd(TBaseType.rrw_create, "external", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
106        addCmd(TBaseType.rrw_create, "external", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
107        addCmd(TBaseType.rrw_create, "external", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
108        addCmd(TBaseType.rrw_create, "filespace", ESqlStatementType.sstgreenplumCreateFilespace);
109
110        addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstpostgresqlCreateFunction);
111
112        addCmd(TBaseType.rrw_create, "global", "temporary", "table", ESqlStatementType.sstcreatetable);
113        addCmd(TBaseType.rrw_create, "global", "temp", "table", ESqlStatementType.sstcreatetable);
114        addCmd(TBaseType.rrw_create, "global", "unlocked", "table", ESqlStatementType.sstcreatetable);
115
116        addCmd(TBaseType.rrw_create, "group", ESqlStatementType.sstpostgresqlCreateGroup);
117
118        addCmd(TBaseType.rrw_create, "index", ESqlStatementType.sstpostgresqlCreateIndex);
119        addCmd(TBaseType.rrw_create, "language", ESqlStatementType.sstpostgresqlCreateLanguage);
120
121        addCmd(TBaseType.rrw_create, "local", "temporary", "table", ESqlStatementType.sstcreatetable);
122        addCmd(TBaseType.rrw_create, "local", "temp", "table", ESqlStatementType.sstcreatetable);
123        addCmd(TBaseType.rrw_create, "local", "unlocked", "table", ESqlStatementType.sstcreatetable);
124
125        addCmd(TBaseType.rrw_create, "materialized", "view", ESqlStatementType.sstpostgresqlCreateMaterializedView);
126
127        addCmd(TBaseType.rrw_create, "operator", ESqlStatementType.sstpostgresqlCreateOperator);
128
129        addCmd(TBaseType.rrw_create, "or", "replace", "trusted", "language", ESqlStatementType.sstpostgresqlCreateFunction);
130        addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "view", ESqlStatementType.sstpostgresqlCreateView);
131        addCmd(TBaseType.rrw_create, "or", "replace", "temp", "view", ESqlStatementType.sstpostgresqlCreateView);
132        addCmd(TBaseType.rrw_create, "or", "replace", "role ", ESqlStatementType.sstpostgresqlCreateRole);
133        addCmd(TBaseType.rrw_create, "or", "replace", "language", ESqlStatementType.sstpostgresqlCreateLanguage);
134        addCmd(TBaseType.rrw_create, "or", "replace", "function", ESqlStatementType.sstpostgresqlCreateFunction);
135        addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstpostgresqlCreateView);
136
137        addCmd(TBaseType.rrw_create, "readable", "external", "web", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
138        addCmd(TBaseType.rrw_create, "readable", "external", "web", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
139        addCmd(TBaseType.rrw_create, "readable", "external", "web", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
140        addCmd(TBaseType.rrw_create, "readable", "external", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
141        addCmd(TBaseType.rrw_create, "readable", "external", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
142        addCmd(TBaseType.rrw_create, "readable", "external", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
143
144        addCmd(TBaseType.rrw_create, "resource", "queue", ESqlStatementType.sstgreenplumCreateResourceQueue);
145
146        addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstpostgresqlCreateRole);
147        addCmd(TBaseType.rrw_create, "rule", ESqlStatementType.sstpostgresqlCreateRule);
148
149        addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstpostgresqlCreateSchema);
150
151        addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstpostgresqlCreateSequence);
152
153        addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable);
154
155        addCmd(TBaseType.rrw_create, "tablespace", ESqlStatementType.sstpostgresqlCreateTablespace);
156
157        addCmd(TBaseType.rrw_create, "temporary", "sequence", ESqlStatementType.sstpostgresqlCreateSequence);
158        addCmd(TBaseType.rrw_create, "temporary", "table", ESqlStatementType.sstcreatetable);
159        addCmd(TBaseType.rrw_create, "temporary", "view", ESqlStatementType.sstpostgresqlCreateView);
160        addCmd(TBaseType.rrw_create, "temp", "sequence", ESqlStatementType.sstpostgresqlCreateSequence);
161        addCmd(TBaseType.rrw_create, "temp", "table", ESqlStatementType.sstcreatetable);
162        addCmd(TBaseType.rrw_create, "temp", "view", ESqlStatementType.sstpostgresqlCreateView);
163
164        addCmd(TBaseType.rrw_create, "trigger", ESqlStatementType.sstcreatetrigger);
165
166        addCmd(TBaseType.rrw_create, "trusted", "language", ESqlStatementType.sstpostgresqlCreateLanguage);
167
168        addCmd(TBaseType.rrw_create, "type", ESqlStatementType.sstpostgresqlCreateType);
169
170        addCmd(TBaseType.rrw_create, "unlocked", "table", ESqlStatementType.sstcreatetable);
171
172        addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstpostgresqlCreateUser);
173
174        addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstpostgresqlCreateView);
175
176        addCmd(TBaseType.rrw_create, "unique", "index", ESqlStatementType.sstpostgresqlCreateIndex);
177
178        addCmd(TBaseType.rrw_create, "writable", "external", "web", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
179        addCmd(TBaseType.rrw_create, "writable", "external", "web", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
180        addCmd(TBaseType.rrw_create, "writable", "external", "web", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
181        addCmd(TBaseType.rrw_create, "writable", "external", "temporary", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
182        addCmd(TBaseType.rrw_create, "writable", "external", "temp", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
183        addCmd(TBaseType.rrw_create, "writable", "external", "table", ESqlStatementType.sstgreenplumCreateExternalTable);
184
185        addCmd(TBaseType.rrw_deallocate, ESqlStatementType.sstpostgresqlDeallocate);
186
187        addCmd(TBaseType.rrw_declare, ESqlStatementType.sstpostgresqlDeclare);
188
189        addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete);
190
191        addCmd(TBaseType.rrw_do, ESqlStatementType.sstpostgresqlDo);
192
193        addCmd(TBaseType.rrw_drop, "aggregate", ESqlStatementType.sstpostgresqlDropAggregate);
194
195        addCmd(TBaseType.rrw_drop, "cast", ESqlStatementType.sstpostgresqlDropCast);
196
197        addCmd(TBaseType.rrw_drop, "conversion", ESqlStatementType.sstpostgresqlDropConversion);
198
199        addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstpostgresqlDropDatabase);
200
201        addCmd(TBaseType.rrw_drop, "domain", ESqlStatementType.sstpostgresqlDropDomain);
202
203        addCmd(TBaseType.rrw_drop, "external", "web", "table", ESqlStatementType.sstgreenplumDropExternalTable);
204        addCmd(TBaseType.rrw_drop, "external", "table", ESqlStatementType.sstgreenplumDropExternalTable);
205
206        addCmd(TBaseType.rrw_drop, "filespace", ESqlStatementType.sstgreenplumDropFilespace);
207
208        addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstpostgresqlDropFunction);
209
210        addCmd(TBaseType.rrw_drop, "group", ESqlStatementType.sstpostgresqlDropGroup);
211
212        addCmd(TBaseType.rrw_drop, "index", ESqlStatementType.sstdropindex);
213
214        addCmd(TBaseType.rrw_drop, "language", ESqlStatementType.sstpostgresqlDropLanguage);
215
216        addCmd(TBaseType.rrw_drop, "materialized", "view", ESqlStatementType.sstpostgresqlDropMaterializedView);
217        addCmd(TBaseType.rrw_drop, "collation", ESqlStatementType.sstpostgresqlDropCollation);
218        addCmd(TBaseType.rrw_drop, "extension", ESqlStatementType.sstpostgresqlDropExtension);
219        addCmd(TBaseType.rrw_drop, "foreign", "data", "wrapper", ESqlStatementType.sstpostgresqlDropForeignDataWrapper);
220        addCmd(TBaseType.rrw_drop, "foreign", "table", ESqlStatementType.sstpostgresqlDropForeignTable);
221        addCmd(TBaseType.rrw_drop, "protocol", ESqlStatementType.sstgreenplumDropProtocol);
222        addCmd(TBaseType.rrw_drop, "resource", "group", ESqlStatementType.sstgreenplumDropResourceGroup);
223        addCmd(TBaseType.rrw_drop, "server", ESqlStatementType.sstpostgresqlDropServer);
224        addCmd(TBaseType.rrw_drop, "text", "search", "configuration", ESqlStatementType.sstpostgresqlDropTextSearchConfiguration);
225        addCmd(TBaseType.rrw_drop, "text", "search", "dictionary", ESqlStatementType.sstpostgresqlDropTextSearchDictionary);
226        addCmd(TBaseType.rrw_drop, "text", "search", "parser", ESqlStatementType.sstpostgresqlDropTextSearchParser);
227        addCmd(TBaseType.rrw_drop, "text", "search", "template", ESqlStatementType.sstpostgresqlDropTextSearchTemplate);
228
229        addCmd(TBaseType.rrw_drop, "operator", ESqlStatementType.sstpostgresqlDropOperator);
230
231        addCmd(TBaseType.rrw_drop, "owned", ESqlStatementType.sstpostgresqlDropOwned);
232
233        addCmd(TBaseType.rrw_drop, "procedural", "language", ESqlStatementType.sstpostgresqlDropLanguage);
234
235        addCmd(TBaseType.rrw_drop, "resource", "queue", ESqlStatementType.sstgreenplumDropResourceQueue);
236
237        addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstpostgresqlDropRole);
238        addCmd(TBaseType.rrw_drop, "rule", ESqlStatementType.sstpostgresqlDropRule);
239        addCmd(TBaseType.rrw_drop, "schema", ESqlStatementType.sstpostgresqlDropSchema);
240        addCmd(TBaseType.rrw_drop, "sequence", ESqlStatementType.sstpostgresqlDropSequence);
241        addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstpostgresqlDropTable);
242        addCmd(TBaseType.rrw_drop, "tablespace", ESqlStatementType.sstpostgresqlDropTablespace);
243
244        addCmd(TBaseType.rrw_drop, "trigger", ESqlStatementType.sstpostgresqlDropTrigger);
245        addCmd(TBaseType.rrw_drop, "type", ESqlStatementType.sstpostgresqlDropType);
246        addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstpostgresqlDropUser);
247        addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstpostgresqlDropView);
248
249        addCmd(TBaseType.rrw_end, ESqlStatementType.sstpostgresqlEnd);
250
251        addCmd(TBaseType.rrw_execute, ESqlStatementType.sstpostgresqlExecute);
252
253        addCmd(TBaseType.rrw_explain, ESqlStatementType.sstpostgresqlExplain);
254
255        addCmd(TBaseType.rrw_fetch, ESqlStatementType.sstFetchFrom);
256
257        addCmd(TBaseType.rrw_grant, ESqlStatementType.sstpostgresqlGrant);
258
259        addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert);
260
261        addCmd(TBaseType.rrw_load, ESqlStatementType.sstpostgresqlLoad);
262
263        addCmd(TBaseType.rrw_lock, ESqlStatementType.sstpostgresqlLock);
264
265        addCmd(TBaseType.rrw_move, ESqlStatementType.sstpostgresqlMove);
266
267        addCmd(TBaseType.rrw_prepare, ESqlStatementType.sstpostgresqlPrepare);
268
269        addCmd(TBaseType.rrw_greenplum_reassign, "owned", ESqlStatementType.sstpostgresqlReassignOwned);
270
271        addCmd(TBaseType.rrw_refresh, "materialized", "view", ESqlStatementType.sstpostgresqlRefreshMaterializedView);
272
273        addCmd(TBaseType.rrw_greenplum_reindex, ESqlStatementType.sstpostgresqlReindex);
274
275        addCmd(TBaseType.rrw_release, "savepoint", ESqlStatementType.sstpostgresqlReleaseSavepoint);
276        addCmd(TBaseType.rrw_release, ESqlStatementType.sstpostgresqlReleaseSavepoint);
277
278        addCmd(TBaseType.rrw_reset, ESqlStatementType.sstpostgresqlReset);
279
280        addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstpostgresqlRevoke);
281
282        addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstpostgresqlRollback);
283
284        addCmd(TBaseType.rrw_savepoint, ESqlStatementType.sstpostgresqlSavepoint);
285
286        addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect);
287
288        addCmd(TBaseType.rrw_set, "session", "characteristics", "as", "transaction", ESqlStatementType.sstpostgresqlSetTransaction);
289        addCmd(TBaseType.rrw_set, "session", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization);
290        addCmd(TBaseType.rrw_set, "session", "role", ESqlStatementType.sstpostgresqlSetRole);
291        addCmd(TBaseType.rrw_set, "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization);
292        addCmd(TBaseType.rrw_set, "transaction", ESqlStatementType.sstpostgresqlSetTransaction);
293        addCmd(TBaseType.rrw_set, "local", "role", ESqlStatementType.sstpostgresqlSetRole);
294        addCmd(TBaseType.rrw_set, "local", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization);
295        addCmd(TBaseType.rrw_set, "role", ESqlStatementType.sstpostgresqlSetRole);
296        addCmd(TBaseType.rrw_set, ESqlStatementType.sstpostgresqlSet);
297
298        addCmd(TBaseType.rrw_show, ESqlStatementType.sstgreenplumShow);
299
300        addCmd(TBaseType.rrw_start, "transaction", ESqlStatementType.sstgreenplumStartTransaction);
301
302        addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstpostgresqlTruncate);
303
304        addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate);
305
306        addCmd(TBaseType.rrw_greenplum_vacuum, ESqlStatementType.sstgreenplumVacuum);
307        addCmd(TBaseType.rrw_values, ESqlStatementType.sstValues);
308    }
309
310    @Override
311    protected String getToken1Str(int token1) {
312        // Greenplum vendor-specific token mappings
313        switch (token1) {
314            case TBaseType.rrw_greenplum_cluster:
315                return "cluster";
316            case TBaseType.rrw_greenplum_copy:
317                return "copy";
318            case TBaseType.rrw_greenplum_reassign:
319                return "reassign";
320            case TBaseType.rrw_greenplum_reindex:
321                return "reindex";
322            case TBaseType.rrw_greenplum_vacuum:
323                return "vacuum";
324            case TBaseType.rrw_greenplum_analyse:
325                return "analyse";
326            default:
327                return null;
328        }
329    }
330
331    @Override
332    public TCustomSqlStatement issql(TSourceToken pcst, EFindSqlStateType pstate, TCustomSqlStatement psqlstatement) {
333        TCustomSqlStatement ret = null;
334
335        gnewsqlstatementtype = ESqlStatementType.sstinvalid;
336
337        if ((pcst.tokencode == TBaseType.cmtdoublehyphen)
338                || (pcst.tokencode == TBaseType.cmtslashstar)
339                || (pcst.tokencode == TBaseType.lexspace)
340                || (pcst.tokencode == TBaseType.lexnewline)
341                || (pcst.tokentype == ETokenType.ttsemicolon)) {
342            return null;
343        }
344
345        int lcpos = pcst.posinlist;
346        TSourceTokenList lcsourcetokenlist = pcst.container;
347        TCustomSqlStatement lccurrentsqlstatement = psqlstatement;
348
349        //subquery after semicolon or at first line
350        if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokentype == ETokenType.ttleftparenthesis)) { // (
351            int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "(");
352            if (k > 0) {
353                ret = new TSelectSqlStatement(this.vendor);
354            }
355
356            return ret;
357        }
358
359        //cte
360        if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_with)) {
361            ret = findcte(pcst);
362            if ((ret != null)) return ret;
363        }
364
365        gnewsqlstatementtype = getStatementTypeForToken(pcst);
366
367        TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
368        switch (gnewsqlstatementtype) {    //
369            case sstinvalid: {
370                ret = null;
371
372                if (pstate == EFindSqlStateType.stnormal) {
373                    if (pcst.tokencode == TBaseType.label_begin) {
374                        ret = new TCommonBlock(this.vendor);
375                        gnewsqlstatementtype = ret.sqlstatementtype;
376                    } else if (pcst.tokencode == TBaseType.rrw_declare) {
377                        ret = new TCommonBlock(this.vendor);
378                        gnewsqlstatementtype = ret.sqlstatementtype;
379                    } else if (pcst.tokencode == TBaseType.rrw_begin) {
380                        ret = new TCommonBlock(this.vendor);
381                        gnewsqlstatementtype = ret.sqlstatementtype;
382                    } else if (pcst.tokencode == TBaseType.rrw_procedure) {
383                        ret = new TPlsqlCreateProcedure(this.vendor);
384                        gnewsqlstatementtype = ret.sqlstatementtype;
385                    } else if (pcst.tokencode == TBaseType.rrw_function) {
386                        ret = new TPlsqlCreateFunction(this.vendor);
387                        gnewsqlstatementtype = ret.sqlstatementtype;
388                    } else if (pcst.tokencode == TBaseType.rrw_package) {
389                        ret = new TPlsqlCreatePackage(this.vendor);
390                        gnewsqlstatementtype = ret.sqlstatementtype;
391                    }
392                }
393                break;
394            }
395            case sstselect: {
396                boolean lcisnewsql = true;
397
398                if (pstate != EFindSqlStateType.stnormal) {
399                    if ((lcprevsolidtoken != null)) {
400                        if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis)
401                            lcisnewsql = false; //subquery
402                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union)
403                            lcisnewsql = false;
404                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect)
405                            lcisnewsql = false;
406                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus)
407                            lcisnewsql = false;
408                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except)
409                            lcisnewsql = false;
410                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return)
411                            lcisnewsql = false;
412                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) {
413                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable)
414                                lcisnewsql = false;
415                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview)
416                                lcisnewsql = false;
417                        }
418
419                        if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) {
420                            TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist);
421                            if ((lcpprevsolidtoken != null)) {
422                                if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union)
423                                    lcisnewsql = false;
424                            }
425                        }
426
427                    }
428
429
430                    if ((lccurrentsqlstatement != null)) {
431                        if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert)
432                            lcisnewsql = false;
433                    }
434
435                }
436
437                if (lcisnewsql)
438                    ret = new TSelectSqlStatement(this.vendor);
439
440                break;
441            }
442            case sstinsert: {
443                boolean lcisnewsql = true;
444                if (pstate != EFindSqlStateType.stnormal) {
445                    if ((lccurrentsqlstatement != null)) {
446
447                    }
448                }
449
450                if (lcisnewsql)
451                    ret = new TInsertSqlStatement(this.vendor);
452
453                break;
454            }
455            case sstupdate: {
456                boolean lcisnewsql = true;
457                if (pstate != EFindSqlStateType.stnormal) {
458                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
459                    if ((lcprevsolidtoken != null)) { //
460                        if (lcprevsolidtoken.tokencode == TBaseType.rrw_on)
461                            lcisnewsql = false;
462                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for)
463                            lcisnewsql = false;
464                    }
465
466                    TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false);
467                    if ((lcnextsolidtoken != null)) {
468                        if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) {
469                            int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "(");
470                            if (k == 0) lcisnewsql = false;
471                        }
472                    }
473
474
475                    if ((lccurrentsqlstatement != null)) {
476                    }
477                }
478
479                if (lcisnewsql) {
480                    ret = new TUpdateSqlStatement(this.vendor);
481                    ret.dummytag = 1; // means set clause in update is not found yet, used to separate set clause from set statement
482                }
483                break;
484            }
485            case sstdelete: {
486                boolean lcisnewsql = true;
487
488                if (pstate != EFindSqlStateType.stnormal) {
489                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
490                    if ((lcprevsolidtoken != null)) {
491                        if (lcprevsolidtoken.tokencode == TBaseType.rrw_on)
492                            lcisnewsql = false;
493                    }
494
495                    if ((lccurrentsqlstatement != null)) {
496                    }
497                }
498
499                if (lcisnewsql)
500                    ret = new TDeleteSqlStatement(this.vendor);
501
502                break;
503            }
504            case sstmerge: {
505                ret = new TMergeSqlStatement(this.vendor);
506                ret.sqlstatementtype = gnewsqlstatementtype;
507                break;
508            }
509            case sstoraclecommit: {
510                ret = new TUnknownSqlStatement(this.vendor);
511                ret.sqlstatementtype = gnewsqlstatementtype;
512                break;
513            }
514            case sstoraclerollback: {
515                ret = new TUnknownSqlStatement(this.vendor);
516                ret.sqlstatementtype = gnewsqlstatementtype;
517                break;
518            }
519            case sstoraclesavepoint: {
520                ret = new TUnknownSqlStatement(this.vendor);
521                ret.sqlstatementtype = gnewsqlstatementtype;
522                break;
523            }
524            case sstoraclerevoke: {
525                ret = new TUnknownSqlStatement(this.vendor);
526                ret.sqlstatementtype = gnewsqlstatementtype;
527                break;
528            }
529            case sstoraclegrant: {
530                ret = new TUnknownSqlStatement(this.vendor);
531                ret.sqlstatementtype = gnewsqlstatementtype;
532                break;
533            }
534            case sstoracleanalyze: {
535                ret = new TUnknownSqlStatement(this.vendor);
536                ret.sqlstatementtype = gnewsqlstatementtype;
537                break;
538            }
539            case sstoracletruncate: {
540                ret = new TUnknownSqlStatement(this.vendor);
541                ret.sqlstatementtype = gnewsqlstatementtype;
542                break;
543            }
544            case sstcreatetable:
545            case sstgreenplumCreateExternalTable: {
546                ret = new TCreateTableSqlStatement(this.vendor);
547                break;
548            }
549            case sstoraclecreateview: {
550                ret = new TCreateViewSqlStatement(this.vendor);
551                break;
552            }
553            case sstcreatematerializedview: {
554                ret = new TCreateMaterializedSqlStatement(this.vendor);
555                break;
556            }
557            case sstoraclecreateindex: {
558                ret = new TCreateIndexSqlStatement(this.vendor);
559                break;
560            }
561            case sstoraclecreatedatabase: {
562                ret = new TCreateDatabaseSqlStatement(this.vendor);
563                break;
564            }
565            case sstoracledroptable: {
566                ret = new TDropTableSqlStatement(this.vendor);
567                break;
568            }
569            case sstoracledropview: {
570                ret = new TDropViewSqlStatement(this.vendor);
571                break;
572            }
573            case sstoracledropindex: {
574                ret = new TDropIndexSqlStatement(this.vendor);
575                break;
576            }
577            case sstaltertable: {
578                ret = new TAlterTableStatement(this.vendor);
579                break;
580            }
581            case sstoraclealtersession: {
582                ret = new TAlterSessionStatement(this.vendor);
583                break;
584            }
585            case sstplsql_createprocedure: {
586                ret = new TPlsqlCreateProcedure(this.vendor);
587                ret.sqlstatementtype = gnewsqlstatementtype;
588                break;
589            }
590            case sstplsql_createfunction: {
591                ret = new TPlsqlCreateFunction(this.vendor);
592                ret.sqlstatementtype = gnewsqlstatementtype;
593                break;
594            }
595            case sstplsql_createpackage: {
596                ret = new TPlsqlCreatePackage(this.vendor);
597                ret.sqlstatementtype = gnewsqlstatementtype;
598                break;
599            }
600            case sstplsql_createtrigger: {
601                ret = new TPlsqlCreateTrigger(this.vendor);
602                ret.sqlstatementtype = gnewsqlstatementtype;
603                break;
604            }
605            case sstplsql_execimmestmt: {
606                ret = new TExecImmeStmt(this.vendor);
607                break;
608            }
609            case sstoraclecreatepackagebody: {
610                ret = new TPlsqlCreatePackage(this.vendor);
611                ret.sqlstatementtype = ESqlStatementType.sstplsql_createpackage;
612                break;
613            }
614            case sstplsql_createtype_placeholder: {
615                ret = new TPlsqlCreateType_Placeholder(this.vendor);
616                ret.sqlstatementtype = gnewsqlstatementtype;
617                break;
618            }
619            case sstplsql_createtypebody: {
620                ret = new TPlsqlCreateTypeBody(this.vendor);
621                ret.sqlstatementtype = gnewsqlstatementtype;
622                break;
623            }
624            case sstCommentOn: {
625                ret = new TCommentOnSqlStmt(this.vendor);
626                break;
627            }
628            case sstoraclecreatesequence: {
629                ret = new TCreateSequenceStmt(this.vendor);
630                break;
631            }
632            case sstoraclecreatesynonym: {
633                ret = new TCreateSynonymStmt(this.vendor);
634                break;
635            }
636            case sstoraclecreatedirectory: {
637                ret = new TOracleCreateDirectoryStmt(this.vendor);
638                break;
639            }
640            case sstpostgresqlCreateIndex:
641                ret = new TCreateIndexSqlStatement(this.vendor);
642                break;
643            case sstpostgresqlCreateView:
644                ret = new TCreateViewSqlStatement(this.vendor);
645                break;
646            case sstpostgresqlCreateFunction:
647                ret = new TCreateFunctionStmt(this.vendor);
648                break;
649            case sstcreatetrigger:
650                ret = new TCreateTriggerStmt(this.vendor);
651                break;
652            case sstpostgresqlMove:
653                ret = new TMoveStmt(EDbVendor.dbvgreenplum);
654                break;
655            case sstpostgresqlTruncate:
656                ret = new TTruncateStatement(EDbVendor.dbvgreenplum);
657                break;
658            case sstpostgresqlExecute:
659                ret = new TExecuteSqlStatement(EDbVendor.dbvgreenplum);
660                break;
661            case sstValues:
662                ret = new TSelectSqlStatement(EDbVendor.dbvgreenplum);
663                break;
664            case sstpostgresqlDeclare: {
665                boolean lcisnewsql = true;
666
667                TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 2, false);
668                if ((lcnextsolidtoken != null)) {
669                    if (lcnextsolidtoken.tokencode == TBaseType.rrw_greenplum_CURSOR) {
670                        lcisnewsql = false;
671                    }
672                }
673
674
675                if (lcisnewsql)
676                    ret = new TCommonBlock(this.vendor);
677                else {
678                    ret = new TUnknownSqlStatement(this.vendor);
679                }
680                ret.sqlstatementtype = gnewsqlstatementtype;
681
682                break;
683            }
684            case sstpostgresqlSet:
685                ret = new TSetStmt(this.vendor);
686                break;
687            case sstcreateExtension:
688                ret = new TCreateExtensionStmt(this.vendor);
689                break;
690            case sstcall:
691                ret = new TCallStatement(this.vendor);
692                break;
693            case sstpostgresqlCreateSchema:
694                ret = new TCreateSchemaSqlStatement(this.vendor);
695                break;
696            case sstpostgresqlDo: {
697                boolean lcisnewsql = false;
698
699                if (pstate == EFindSqlStateType.stnormal) {
700                    TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false);
701                    if ((lcnextsolidtoken != null)) {
702                        if (lcnextsolidtoken.tokencode == TBaseType.rrw_greenplum_function_delimiter)
703                            lcisnewsql = true;
704                    }
705                }
706
707                if (lcisnewsql)
708                    ret = new TDoExecuteBlockStmt(this.vendor);
709
710                break;
711            }
712            case sstpostgresqlComment:
713                ret = new TCommentOnSqlStmt(this.vendor);
714                break;
715            default: {
716                ret = new TUnknownSqlStatement(this.vendor);
717                ret.sqlstatementtype = gnewsqlstatementtype;
718                break;
719            }
720        }    // case
721
722        return ret;
723    }
724}