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        addCmd(TBaseType.rrw_table, ESqlStatementType.sstselect);  // TABLE t = SELECT * FROM t
288
289        addCmd(TBaseType.rrw_set, "session", "characteristics", "as", "transaction", ESqlStatementType.sstpostgresqlSetTransaction);
290        addCmd(TBaseType.rrw_set, "session", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization);
291        addCmd(TBaseType.rrw_set, "session", "role", ESqlStatementType.sstpostgresqlSetRole);
292        addCmd(TBaseType.rrw_set, "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization);
293        addCmd(TBaseType.rrw_set, "transaction", ESqlStatementType.sstpostgresqlSetTransaction);
294        addCmd(TBaseType.rrw_set, "local", "role", ESqlStatementType.sstpostgresqlSetRole);
295        addCmd(TBaseType.rrw_set, "local", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization);
296        addCmd(TBaseType.rrw_set, "role", ESqlStatementType.sstpostgresqlSetRole);
297        addCmd(TBaseType.rrw_set, ESqlStatementType.sstpostgresqlSet);
298
299        addCmd(TBaseType.rrw_show, ESqlStatementType.sstgreenplumShow);
300
301        addCmd(TBaseType.rrw_start, "transaction", ESqlStatementType.sstgreenplumStartTransaction);
302
303        addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstpostgresqlTruncate);
304
305        addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate);
306
307        addCmd(TBaseType.rrw_greenplum_vacuum, ESqlStatementType.sstgreenplumVacuum);
308        addCmd(TBaseType.rrw_values, ESqlStatementType.sstValues);
309    }
310
311    @Override
312    protected String getToken1Str(int token1) {
313        // Greenplum vendor-specific token mappings
314        switch (token1) {
315            case TBaseType.rrw_greenplum_cluster:
316                return "cluster";
317            case TBaseType.rrw_greenplum_copy:
318                return "copy";
319            case TBaseType.rrw_greenplum_reassign:
320                return "reassign";
321            case TBaseType.rrw_greenplum_reindex:
322                return "reindex";
323            case TBaseType.rrw_greenplum_vacuum:
324                return "vacuum";
325            case TBaseType.rrw_greenplum_analyse:
326                return "analyse";
327            default:
328                return null;
329        }
330    }
331
332    @Override
333    public TCustomSqlStatement issql(TSourceToken pcst, EFindSqlStateType pstate, TCustomSqlStatement psqlstatement) {
334        TCustomSqlStatement ret = null;
335
336        gnewsqlstatementtype = ESqlStatementType.sstinvalid;
337
338        if ((pcst.tokencode == TBaseType.cmtdoublehyphen)
339                || (pcst.tokencode == TBaseType.cmtslashstar)
340                || (pcst.tokencode == TBaseType.lexspace)
341                || (pcst.tokencode == TBaseType.lexnewline)
342                || (pcst.tokentype == ETokenType.ttsemicolon)) {
343            return null;
344        }
345
346        int lcpos = pcst.posinlist;
347        TSourceTokenList lcsourcetokenlist = pcst.container;
348        TCustomSqlStatement lccurrentsqlstatement = psqlstatement;
349
350        //subquery after semicolon or at first line
351        if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokentype == ETokenType.ttleftparenthesis)) { // (
352            int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "(");
353            if (k > 0) {
354                ret = new TSelectSqlStatement(this.vendor);
355            }
356
357            return ret;
358        }
359
360        //cte
361        if ((pstate == EFindSqlStateType.stnormal) && (pcst.tokencode == TBaseType.rrw_with)) {
362            ret = findcte(pcst);
363            if ((ret != null)) return ret;
364        }
365
366        gnewsqlstatementtype = getStatementTypeForToken(pcst);
367
368        TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
369        switch (gnewsqlstatementtype) {    //
370            case sstinvalid: {
371                ret = null;
372
373                if (pstate == EFindSqlStateType.stnormal) {
374                    if (pcst.tokencode == TBaseType.label_begin) {
375                        ret = new TCommonBlock(this.vendor);
376                        gnewsqlstatementtype = ret.sqlstatementtype;
377                    } else if (pcst.tokencode == TBaseType.rrw_declare) {
378                        ret = new TCommonBlock(this.vendor);
379                        gnewsqlstatementtype = ret.sqlstatementtype;
380                    } else if (pcst.tokencode == TBaseType.rrw_begin) {
381                        ret = new TCommonBlock(this.vendor);
382                        gnewsqlstatementtype = ret.sqlstatementtype;
383                    } else if (pcst.tokencode == TBaseType.rrw_procedure) {
384                        ret = new TPlsqlCreateProcedure(this.vendor);
385                        gnewsqlstatementtype = ret.sqlstatementtype;
386                    } else if (pcst.tokencode == TBaseType.rrw_function) {
387                        ret = new TPlsqlCreateFunction(this.vendor);
388                        gnewsqlstatementtype = ret.sqlstatementtype;
389                    } else if (pcst.tokencode == TBaseType.rrw_package) {
390                        ret = new TPlsqlCreatePackage(this.vendor);
391                        gnewsqlstatementtype = ret.sqlstatementtype;
392                    }
393                }
394                break;
395            }
396            case sstselect: {
397                boolean lcisnewsql = true;
398
399                if (pstate != EFindSqlStateType.stnormal) {
400                    if ((lcprevsolidtoken != null)) {
401                        if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis)
402                            lcisnewsql = false; //subquery
403                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union)
404                            lcisnewsql = false;
405                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect)
406                            lcisnewsql = false;
407                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus)
408                            lcisnewsql = false;
409                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except)
410                            lcisnewsql = false;
411                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return)
412                            lcisnewsql = false;
413                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) {
414                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable)
415                                lcisnewsql = false;
416                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview)
417                                lcisnewsql = false;
418                        }
419
420                        if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) {
421                            TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist);
422                            if ((lcpprevsolidtoken != null)) {
423                                if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union)
424                                    lcisnewsql = false;
425                            }
426                        }
427
428                    }
429
430
431                    if ((lccurrentsqlstatement != null)) {
432                        if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert)
433                            lcisnewsql = false;
434                    }
435
436                }
437
438                if (lcisnewsql)
439                    ret = new TSelectSqlStatement(this.vendor);
440
441                break;
442            }
443            case sstinsert: {
444                boolean lcisnewsql = true;
445                if (pstate != EFindSqlStateType.stnormal) {
446                    if ((lccurrentsqlstatement != null)) {
447
448                    }
449                }
450
451                if (lcisnewsql)
452                    ret = new TInsertSqlStatement(this.vendor);
453
454                break;
455            }
456            case sstupdate: {
457                boolean lcisnewsql = true;
458                if (pstate != EFindSqlStateType.stnormal) {
459                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
460                    if ((lcprevsolidtoken != null)) { //
461                        if (lcprevsolidtoken.tokencode == TBaseType.rrw_on)
462                            lcisnewsql = false;
463                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for)
464                            lcisnewsql = false;
465                    }
466
467                    TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false);
468                    if ((lcnextsolidtoken != null)) {
469                        if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) {
470                            int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "(");
471                            if (k == 0) lcisnewsql = false;
472                        }
473                    }
474
475
476                    if ((lccurrentsqlstatement != null)) {
477                    }
478                }
479
480                if (lcisnewsql) {
481                    ret = new TUpdateSqlStatement(this.vendor);
482                    ret.dummytag = 1; // means set clause in update is not found yet, used to separate set clause from set statement
483                }
484                break;
485            }
486            case sstdelete: {
487                boolean lcisnewsql = true;
488
489                if (pstate != EFindSqlStateType.stnormal) {
490                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
491                    if ((lcprevsolidtoken != null)) {
492                        if (lcprevsolidtoken.tokencode == TBaseType.rrw_on)
493                            lcisnewsql = false;
494                    }
495
496                    if ((lccurrentsqlstatement != null)) {
497                    }
498                }
499
500                if (lcisnewsql)
501                    ret = new TDeleteSqlStatement(this.vendor);
502
503                break;
504            }
505            case sstmerge: {
506                ret = new TMergeSqlStatement(this.vendor);
507                ret.sqlstatementtype = gnewsqlstatementtype;
508                break;
509            }
510            case sstoraclecommit: {
511                ret = new TUnknownSqlStatement(this.vendor);
512                ret.sqlstatementtype = gnewsqlstatementtype;
513                break;
514            }
515            case sstoraclerollback: {
516                ret = new TUnknownSqlStatement(this.vendor);
517                ret.sqlstatementtype = gnewsqlstatementtype;
518                break;
519            }
520            case sstoraclesavepoint: {
521                ret = new TUnknownSqlStatement(this.vendor);
522                ret.sqlstatementtype = gnewsqlstatementtype;
523                break;
524            }
525            case sstoraclerevoke: {
526                ret = new TUnknownSqlStatement(this.vendor);
527                ret.sqlstatementtype = gnewsqlstatementtype;
528                break;
529            }
530            case sstoraclegrant: {
531                ret = new TUnknownSqlStatement(this.vendor);
532                ret.sqlstatementtype = gnewsqlstatementtype;
533                break;
534            }
535            case sstoracleanalyze: {
536                ret = new TUnknownSqlStatement(this.vendor);
537                ret.sqlstatementtype = gnewsqlstatementtype;
538                break;
539            }
540            case sstoracletruncate: {
541                ret = new TUnknownSqlStatement(this.vendor);
542                ret.sqlstatementtype = gnewsqlstatementtype;
543                break;
544            }
545            case sstcreatetable:
546            case sstgreenplumCreateExternalTable: {
547                ret = new TCreateTableSqlStatement(this.vendor);
548                break;
549            }
550            case sstoraclecreateview: {
551                ret = new TCreateViewSqlStatement(this.vendor);
552                break;
553            }
554            case sstcreatematerializedview: {
555                ret = new TCreateMaterializedSqlStatement(this.vendor);
556                break;
557            }
558            case sstoraclecreateindex: {
559                ret = new TCreateIndexSqlStatement(this.vendor);
560                break;
561            }
562            case sstoraclecreatedatabase: {
563                ret = new TCreateDatabaseSqlStatement(this.vendor);
564                break;
565            }
566            case sstoracledroptable: {
567                ret = new TDropTableSqlStatement(this.vendor);
568                break;
569            }
570            case sstoracledropview: {
571                ret = new TDropViewSqlStatement(this.vendor);
572                break;
573            }
574            case sstoracledropindex: {
575                ret = new TDropIndexSqlStatement(this.vendor);
576                break;
577            }
578            case sstaltertable: {
579                ret = new TAlterTableStatement(this.vendor);
580                break;
581            }
582            case sstoraclealtersession: {
583                ret = new TAlterSessionStatement(this.vendor);
584                break;
585            }
586            case sstplsql_createprocedure: {
587                ret = new TPlsqlCreateProcedure(this.vendor);
588                ret.sqlstatementtype = gnewsqlstatementtype;
589                break;
590            }
591            case sstplsql_createfunction: {
592                ret = new TPlsqlCreateFunction(this.vendor);
593                ret.sqlstatementtype = gnewsqlstatementtype;
594                break;
595            }
596            case sstplsql_createpackage: {
597                ret = new TPlsqlCreatePackage(this.vendor);
598                ret.sqlstatementtype = gnewsqlstatementtype;
599                break;
600            }
601            case sstplsql_createtrigger: {
602                ret = new TPlsqlCreateTrigger(this.vendor);
603                ret.sqlstatementtype = gnewsqlstatementtype;
604                break;
605            }
606            case sstplsql_execimmestmt: {
607                ret = new TExecImmeStmt(this.vendor);
608                break;
609            }
610            case sstoraclecreatepackagebody: {
611                ret = new TPlsqlCreatePackage(this.vendor);
612                ret.sqlstatementtype = ESqlStatementType.sstplsql_createpackage;
613                break;
614            }
615            case sstplsql_createtype_placeholder: {
616                ret = new TPlsqlCreateType_Placeholder(this.vendor);
617                ret.sqlstatementtype = gnewsqlstatementtype;
618                break;
619            }
620            case sstplsql_createtypebody: {
621                ret = new TPlsqlCreateTypeBody(this.vendor);
622                ret.sqlstatementtype = gnewsqlstatementtype;
623                break;
624            }
625            case sstCommentOn: {
626                ret = new TCommentOnSqlStmt(this.vendor);
627                break;
628            }
629            case sstoraclecreatesequence: {
630                ret = new TCreateSequenceStmt(this.vendor);
631                break;
632            }
633            case sstoraclecreatesynonym: {
634                ret = new TCreateSynonymStmt(this.vendor);
635                break;
636            }
637            case sstoraclecreatedirectory: {
638                ret = new TOracleCreateDirectoryStmt(this.vendor);
639                break;
640            }
641            case sstpostgresqlCreateIndex:
642                ret = new TCreateIndexSqlStatement(this.vendor);
643                break;
644            case sstpostgresqlCreateView:
645                ret = new TCreateViewSqlStatement(this.vendor);
646                break;
647            case sstpostgresqlCreateFunction:
648                ret = new TCreateFunctionStmt(this.vendor);
649                break;
650            case sstcreatetrigger:
651                ret = new TCreateTriggerStmt(this.vendor);
652                break;
653            case sstpostgresqlMove:
654                ret = new TMoveStmt(EDbVendor.dbvgreenplum);
655                break;
656            case sstpostgresqlTruncate:
657                ret = new TTruncateStatement(EDbVendor.dbvgreenplum);
658                break;
659            case sstpostgresqlExecute:
660                ret = new TExecuteSqlStatement(EDbVendor.dbvgreenplum);
661                break;
662            case sstValues:
663                ret = new TSelectSqlStatement(EDbVendor.dbvgreenplum);
664                break;
665            case sstpostgresqlDeclare: {
666                boolean lcisnewsql = true;
667
668                TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 2, false);
669                if ((lcnextsolidtoken != null)) {
670                    if (lcnextsolidtoken.tokencode == TBaseType.rrw_greenplum_CURSOR) {
671                        lcisnewsql = false;
672                    }
673                }
674
675
676                if (lcisnewsql)
677                    ret = new TCommonBlock(this.vendor);
678                else {
679                    ret = new TUnknownSqlStatement(this.vendor);
680                }
681                ret.sqlstatementtype = gnewsqlstatementtype;
682
683                break;
684            }
685            case sstpostgresqlSet:
686                ret = new TSetStmt(this.vendor);
687                break;
688            case sstcreateExtension:
689                ret = new TCreateExtensionStmt(this.vendor);
690                break;
691            case sstcall:
692                ret = new TCallStatement(this.vendor);
693                break;
694            case sstpostgresqlCreateSchema:
695                ret = new TCreateSchemaSqlStatement(this.vendor);
696                break;
697            case sstpostgresqlDo: {
698                boolean lcisnewsql = false;
699
700                if (pstate == EFindSqlStateType.stnormal) {
701                    TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false);
702                    if ((lcnextsolidtoken != null)) {
703                        if (lcnextsolidtoken.tokencode == TBaseType.rrw_greenplum_function_delimiter)
704                            lcisnewsql = true;
705                    }
706                }
707
708                if (lcisnewsql)
709                    ret = new TDoExecuteBlockStmt(this.vendor);
710
711                break;
712            }
713            case sstpostgresqlComment:
714                ret = new TCommentOnSqlStmt(this.vendor);
715                break;
716            default: {
717                ret = new TUnknownSqlStatement(this.vendor);
718                ret.sqlstatementtype = gnewsqlstatementtype;
719                break;
720            }
721        }    // case
722
723        return ret;
724    }
725}