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 * GaussDB SQL command resolver.
010 * Migrated from TSqlCmds monolithic implementation.
011 *
012 * @since 3.1.0.9
013 */
014public class TSqlCmdsGaussdb extends AbstractSqlCmds {
015
016    public TSqlCmdsGaussdb() {
017        super(EDbVendor.dbvgaussdb);
018    }
019
020    @Override
021    protected String getToken1Str(int token1) {
022        // GaussDB uses PostgreSQL-style vendor-specific tokens
023        switch (token1) {
024            case TBaseType.rrw_postgresql_cluster:
025                return "cluster";
026            case TBaseType.rrw_postgresql_copy:
027                return "copy";
028            case TBaseType.rrw_postgresql_discard:
029                return "discard";
030            case TBaseType.rrw_postgresql_listen:
031                return "listen";
032            case TBaseType.rrw_postgresql_notify:
033                return "notify";
034            case TBaseType.rrw_postgresql_reassign:
035                return "reassign";
036            case TBaseType.rrw_postgresql_reindex:
037                return "reindex";
038            case TBaseType.rrw_postgresql_security:
039                return "security";
040            case TBaseType.rrw_postgresql_unlisten:
041                return "unlisten";
042            case TBaseType.rrw_postgresql_vacuum:
043                return "vacuum";
044            case TBaseType.rrw_postgresql_import:
045                return "import";
046            default:
047                return null;
048        }
049    }
050
051    @Override
052    protected void initializeCommands() {
053        // Commands must be sorted alphabetically
054        // Extracted from TSqlCmds.initgaussdbcmds() lines 2670-3014
055
056        addCmd(TBaseType.rrw_abort, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlabort);
057        addCmd(TBaseType.rrw_alter, "aggregate", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterAggregate);
058        addCmd(TBaseType.rrw_alter, "collation", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterCollation);
059        addCmd(TBaseType.rrw_alter, "conversion", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterConversion);
060        addCmd(TBaseType.rrw_alter, "database", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlalterdatabase);
061        addCmd(TBaseType.rrw_alter, "default", "privileges", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterDefaultPrivileges);
062        addCmd(TBaseType.rrw_alter, "domain", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterDomain);
063        addCmd(TBaseType.rrw_alter, "event", "trigger", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterEventTrigger);
064        addCmd(TBaseType.rrw_alter, "extension", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterExtension);
065        addCmd(TBaseType.rrw_alter, "foreign", "data", "wrapper", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterForeignDataWrapper);
066        addCmd(TBaseType.rrw_alter, "foreign", "Table", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterForeignTable);
067
068        addCmd(TBaseType.rrw_alter, "function", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterfunction);
069        addCmd(TBaseType.rrw_alter, "group", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterGroup);
070        addCmd(TBaseType.rrw_alter, "index", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterIndex);
071        addCmd(TBaseType.rrw_alter, "language", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterLanguage);
072        addCmd(TBaseType.rrw_alter, "large", "object", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterLargeObject);
073        addCmd(TBaseType.rrw_alter, "materialized", "view", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterMaterializedView);
074        addCmd(TBaseType.rrw_alter, "operator", "family", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterOperatorFamily);
075        addCmd(TBaseType.rrw_alter, "operator", "class", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterOperatorClass);
076        addCmd(TBaseType.rrw_alter, "operator", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterOperator);
077        addCmd(TBaseType.rrw_alter, "package", " ", " ", " ", " ", " ", ESqlStatementType.sstAlterPackage);
078        addCmd(TBaseType.rrw_alter, "policy", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterPolicy);
079        addCmd(TBaseType.rrw_alter, "procedural", "language", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterLanguage);
080        addCmd(TBaseType.rrw_alter, "procedure", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterProcedure);
081        addCmd(TBaseType.rrw_alter, "publication", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterPublication);
082        addCmd(TBaseType.rrw_alter, "role", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterRole);
083        addCmd(TBaseType.rrw_alter, "routine", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterRoutine);
084        addCmd(TBaseType.rrw_alter, "rule", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterRule);
085        addCmd(TBaseType.rrw_alter, "schema", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterSchema);
086        addCmd(TBaseType.rrw_alter, "sequence", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterSequence);
087        addCmd(TBaseType.rrw_alter, "server", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterServer);
088        addCmd(TBaseType.rrw_alter, "statistics", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterStatistics);
089        addCmd(TBaseType.rrw_alter, "subscription", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterSubscription);
090        addCmd(TBaseType.rrw_alter, "synonym", " ", " ", " ", " ", " ", ESqlStatementType.sstAlterSynonym);
091        addCmd(TBaseType.rrw_alter, "system", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterSystem);
092
093        addCmd(TBaseType.rrw_alter, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstaltertable);
094        addCmd(TBaseType.rrw_alter, "tablespace", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterTablespace);
095
096        addCmd(TBaseType.rrw_alter, "text", "search", "configuration", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterTextSearchConfiguration);
097        addCmd(TBaseType.rrw_alter, "text", "search", "dictionary", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterTextSearchDictionary);
098        addCmd(TBaseType.rrw_alter, "text", "search", "parser", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterTextSearchParser);
099        addCmd(TBaseType.rrw_alter, "text", "search", "template", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterTextSearchTemplate);
100        addCmd(TBaseType.rrw_alter, "trigger", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterTrigger);
101        addCmd(TBaseType.rrw_alter, "type", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterType);
102        addCmd(TBaseType.rrw_alter, "user", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterUser);
103        addCmd(TBaseType.rrw_alter, "user", "mapping", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterUserMapping);
104        addCmd(TBaseType.rrw_alter, "view", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAlterView);
105        addCmd(TBaseType.rrw_analyze, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlAnalyze);
106
107        // begin is recognized in issql() method.
108      //  addCmd(TBaseType.rrw_begin, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlBegin);
109
110        addCmd(TBaseType.rrw_call, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstcall);
111
112        addCmd(TBaseType.rrw_checkpoint, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCheckpoint);
113        addCmd(TBaseType.rrw_close, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlClose);
114
115        addCmd(TBaseType.rrw_postgresql_cluster, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCluster);
116
117        addCmd(TBaseType.rrw_comment, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlComment);
118
119        addCmd(TBaseType.rrw_commit, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCommit);
120        addCmd(TBaseType.rrw_commit, "prepared", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCommitPrepared);
121        addCmd(TBaseType.rrw_postgresql_copy, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCopy);
122
123        addCmd(TBaseType.rrw_create, "access", "method", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateAccessMethod);
124        addCmd(TBaseType.rrw_create, "aggregate", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateAggregate);
125        addCmd(TBaseType.rrw_create, "assertion", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateAssertion);
126        addCmd(TBaseType.rrw_create, "cast", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateCast);
127        addCmd(TBaseType.rrw_create, "collation", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateCollation);
128
129        addCmd(TBaseType.rrw_create, "constraint", "trigger", " ", " ", " ", " ", ESqlStatementType.sstcreatetrigger);
130
131        addCmd(TBaseType.rrw_create, "conversion", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlConversion);
132        addCmd(TBaseType.rrw_create, "database", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateDatabase);
133        addCmd(TBaseType.rrw_create, "default", "conversion", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlConversion);
134        addCmd(TBaseType.rrw_create, "domain", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateDomain);
135        addCmd(TBaseType.rrw_create, "event", "trigger", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateEventTrigger);
136        addCmd(TBaseType.rrw_create, "extension", " ", " ", " ", " ", " ", ESqlStatementType.sstcreateExtension);
137
138        addCmd(TBaseType.rrw_create, "foreign", "data", "wrapper", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateForeignDataWrapper);
139        addCmd(TBaseType.rrw_create, "foreign", "table", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateForeignTable);
140        addCmd(TBaseType.rrw_create, "function", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateFunction);
141
142        addCmd(TBaseType.rrw_create, "global", "index", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateIndex);
143
144        addCmd(TBaseType.rrw_create, "global", "temp", "table", " ", " ", " ", ESqlStatementType.sstcreatetable);
145        addCmd(TBaseType.rrw_create, "global", "temporary", "table", " ", " ", " ", ESqlStatementType.sstcreatetable);
146        addCmd(TBaseType.rrw_create, "global", "unlocked", "table", " ", " ", " ", ESqlStatementType.sstcreatetable);
147        addCmd(TBaseType.rrw_create, "global", "unique", "index", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateIndex);
148
149        addCmd(TBaseType.rrw_create, "group", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateGroup);
150
151        addCmd(TBaseType.rrw_create, "incremental", "materialized", "view", " ", " ", " ", ESqlStatementType.sstcreatematerializedview);
152
153        addCmd(TBaseType.rrw_create, "index", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateIndex);
154        addCmd(TBaseType.rrw_create, "language", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateLanguage);
155
156        addCmd(TBaseType.rrw_create, "local", "temp", "table", " ", " ", " ", ESqlStatementType.sstcreatetable);
157        addCmd(TBaseType.rrw_create, "local", "temporary", "table", " ", " ", " ", ESqlStatementType.sstcreatetable);
158        addCmd(TBaseType.rrw_create, "local", "unlocked", "table", " ", " ", " ", ESqlStatementType.sstcreatetable);
159
160        addCmd(TBaseType.rrw_create, "materialized", "view", " ", " ", " ", " ", ESqlStatementType.sstcreatematerializedview);
161
162        addCmd(TBaseType.rrw_create, "operator", "family", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateOperatorFimaly);
163        addCmd(TBaseType.rrw_create, "operator", "class", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateOperatorClass);
164        addCmd(TBaseType.rrw_create, "operator", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateOperator);
165
166        addCmd(TBaseType.rrw_create, "or", "replace", "function", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateFunction);
167        addCmd(TBaseType.rrw_create, "or", "replace", "language", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateLanguage);
168
169        addCmd(TBaseType.rrw_create,"or","replace","package","body"," "," ", ESqlStatementType.sstoraclecreatepackagebody);
170        addCmd(TBaseType.rrw_create,"or","replace","package"," "," "," ", ESqlStatementType.sstplsql_createpackage);
171
172
173        addCmd(TBaseType.rrw_create, "or", "replace", "procedural", "language", " ", " ", ESqlStatementType.sstpostgresqlCreateLanguage);
174        addCmd(TBaseType.rrw_create, "or", "replace", "procedure", " ", " ", " ", ESqlStatementType.sstcreateprocedure);
175        addCmd(TBaseType.rrw_create, "or", "replace", "role ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateRole);
176        addCmd(TBaseType.rrw_create, "or", "replace", "rule ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateRule);
177        addCmd(TBaseType.rrw_create,"or","replace","synonym"," "," "," ", ESqlStatementType.sstcreatesynonym);
178        addCmd(TBaseType.rrw_create,"or","replace","directory"," "," "," ", ESqlStatementType.sstoraclecreatedirectory);
179
180        addCmd(TBaseType.rrw_create, "or", "replace", "temp", "view", " ", " ", ESqlStatementType.sstpostgresqlCreateView);
181        addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "view", " ", " ", ESqlStatementType.sstpostgresqlCreateView);
182        addCmd(TBaseType.rrw_create, "or", "replace", "trigger", " ", " ", " ", ESqlStatementType.sstcreatetrigger);
183        addCmd(TBaseType.rrw_create, "or", "replace", "trusted", "language", " ", " ", ESqlStatementType.sstpostgresqlCreateLanguage);
184        addCmd(TBaseType.rrw_create, "or", "replace", "trusted", "procedural", "language", " ", ESqlStatementType.sstpostgresqlCreateLanguage);
185        addCmd(TBaseType.rrw_create, "or", "replace", "view", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateView);
186
187        addCmd(TBaseType.rrw_create,"package","body"," "," "," "," ", ESqlStatementType.sstoraclecreatepackagebody);
188        addCmd(TBaseType.rrw_create,"package"," "," "," "," "," ", ESqlStatementType.sstplsql_createpackage);
189
190        addCmd(TBaseType.rrw_create, "policy", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreatePolicy);
191        addCmd(TBaseType.rrw_create, "procedural", "language", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateLanguage);
192        addCmd(TBaseType.rrw_create, "procedure", " ", " ", " ", " ", " ", ESqlStatementType.sstcreateprocedure);
193        addCmd(TBaseType.rrw_create, "publication", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreatePublication);
194
195        addCmd(TBaseType.rrw_create, "role", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateRole);
196        addCmd(TBaseType.rrw_create, "rule", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateRule);
197
198
199        addCmd(TBaseType.rrw_create, "schema", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateSchema);
200
201        addCmd(TBaseType.rrw_create, "sequence", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateSequence);
202
203
204        addCmd(TBaseType.rrw_create, "server", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateServer);
205
206        addCmd(TBaseType.rrw_create, "statistics", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateStatistics);
207        addCmd(TBaseType.rrw_create, "subscription", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateSubscription);
208        addCmd(TBaseType.rrw_create,"synonym"," "," "," "," "," ", ESqlStatementType.sstcreatesynonym);
209        addCmd(TBaseType.rrw_create,"directory"," "," "," "," "," ", ESqlStatementType.sstoraclecreatedirectory);
210
211        addCmd(TBaseType.rrw_create, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstcreatetable);
212
213        addCmd(TBaseType.rrw_create, "tablespace", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateTablespace);
214
215        addCmd(TBaseType.rrw_create, "temp", "sequence", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateSequence);
216        addCmd(TBaseType.rrw_create, "temp", "table", " ", " ", " ", " ", ESqlStatementType.sstcreatetable);
217        addCmd(TBaseType.rrw_create, "temp", "view", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateView);
218        addCmd(TBaseType.rrw_create, "temporary", "sequence", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateSequence);
219        addCmd(TBaseType.rrw_create, "temporary", "table", " ", " ", " ", " ", ESqlStatementType.sstcreatetable);
220        addCmd(TBaseType.rrw_create, "temporary", "view", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateView);
221
222        addCmd(TBaseType.rrw_create, "text", "search", "configuration", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateTextSearchConfiguration);
223        addCmd(TBaseType.rrw_create, "text", "search", "dictionary", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateTextSearchDictionary);
224        addCmd(TBaseType.rrw_create, "text", "search", "parser", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateTextSearchParser);
225        addCmd(TBaseType.rrw_create, "text", "search", "template", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateTextSearchTemplate);
226
227        addCmd(TBaseType.rrw_create, "transform", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateTransform);
228        addCmd(TBaseType.rrw_create, "trigger", " ", " ", " ", " ", " ", ESqlStatementType.sstcreatetrigger);
229
230        addCmd(TBaseType.rrw_create, "trusted", "language", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateLanguage);
231        addCmd(TBaseType.rrw_create, "trusted", "procedural", "language", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateLanguage);
232
233        addCmd(TBaseType.rrw_create, "type", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateType);
234
235        addCmd(TBaseType.rrw_create, "unlocked", "table", " ", " ", " ", " ", ESqlStatementType.sstcreatetable);
236        addCmd(TBaseType.rrw_create, "unlogged", "sequence", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateSequence);
237        addCmd(TBaseType.rrw_create, "unlogged", "table", " ", " ", " ", " ", ESqlStatementType.sstcreatetable);
238
239        addCmd(TBaseType.rrw_create, "user", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateUser);
240
241        addCmd(TBaseType.rrw_create, "user", "mapping", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateUserMapping);
242
243        addCmd(TBaseType.rrw_create, "view", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateView);
244
245        addCmd(TBaseType.rrw_create, "unique", "index", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlCreateIndex);
246
247
248        addCmd(TBaseType.rrw_deallocate, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDeallocate);
249
250        addCmd(TBaseType.rrw_declare, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDeclare);
251
252        addCmd(TBaseType.rrw_delete, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstdelete);
253
254        addCmd(TBaseType.rrw_postgresql_discard, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDiscard);
255
256        addCmd(TBaseType.rrw_do, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDo);
257
258        addCmd(TBaseType.rrw_drop, "access", "method", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropAccessMethod);
259        addCmd(TBaseType.rrw_drop, "aggregate", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropAggregate);
260        addCmd(TBaseType.rrw_drop, "assertion", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropAssertion);
261
262        addCmd(TBaseType.rrw_drop, "cast", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropCast);
263
264        addCmd(TBaseType.rrw_drop, "collation", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropCollation);
265
266        addCmd(TBaseType.rrw_drop, "conversion", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropConversion);
267
268        addCmd(TBaseType.rrw_drop, "database", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropDatabase);
269
270        addCmd(TBaseType.rrw_drop, "domain", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropDomain);
271        addCmd(TBaseType.rrw_drop, "event", "trigger", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropEventTrigger);
272        addCmd(TBaseType.rrw_drop, "extension", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropExtension);
273
274        addCmd(TBaseType.rrw_drop, "foreign", "data", "wrapper", " ", " ", " ", ESqlStatementType.sstpostgresqlDropForeignDataWrapper);
275
276        addCmd(TBaseType.rrw_drop, "foreign", "table", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropForeignTable);
277
278        addCmd(TBaseType.rrw_drop, "function", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropFunction);
279
280        addCmd(TBaseType.rrw_drop, "group", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropGroup);
281
282        addCmd(TBaseType.rrw_drop, "index", " ", " ", " ", " ", " ", ESqlStatementType.sstdropindex);
283
284        addCmd(TBaseType.rrw_drop, "language", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropLanguage);
285
286        addCmd(TBaseType.rrw_drop, "materialized", "view", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropMaterializedView);
287
288        addCmd(TBaseType.rrw_drop, "operator", "family ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropOperatorFamily);
289        addCmd(TBaseType.rrw_drop, "operator", "class", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropOperatorClass);
290        addCmd(TBaseType.rrw_drop, "operator", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropOperator);
291
292        addCmd(TBaseType.rrw_drop, "owned", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropOwned);
293        addCmd(TBaseType.rrw_drop, "policy", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropPolicy);
294        addCmd(TBaseType.rrw_drop, "procedural", "language", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropLanguage);
295        addCmd(TBaseType.rrw_drop, "procedure", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropProcedure);
296        addCmd(TBaseType.rrw_drop, "publication", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropPublication);
297
298        addCmd(TBaseType.rrw_drop, "role", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropRole);
299        addCmd(TBaseType.rrw_drop, "routine", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropRoutine);
300        addCmd(TBaseType.rrw_drop, "rule", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropRule);
301        addCmd(TBaseType.rrw_drop, "schema", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropSchema);
302        addCmd(TBaseType.rrw_drop, "sequence", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropSequence);
303        addCmd(TBaseType.rrw_drop, "server", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropServer);
304        addCmd(TBaseType.rrw_drop, "statistics", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropStatistics);
305        addCmd(TBaseType.rrw_drop, "subscription", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropSubscription);
306        addCmd(TBaseType.rrw_drop,"synonym"," "," "," "," "," ", ESqlStatementType.sstdropsynonym);
307        addCmd(TBaseType.rrw_drop, "table", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropTable);
308        addCmd(TBaseType.rrw_drop, "tablespace", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropTablespace);
309
310        addCmd(TBaseType.rrw_drop, "text", "search", "configuration", " ", " ", " ", ESqlStatementType.sstpostgresqlDropTextSearchConfiguration);
311        addCmd(TBaseType.rrw_drop, "text", "search", "dictionary", " ", " ", " ", ESqlStatementType.sstpostgresqlDropTextSearchDictionary);
312        addCmd(TBaseType.rrw_drop, "text", "search", "parser", " ", " ", " ", ESqlStatementType.sstpostgresqlDropTextSearchParser);
313        addCmd(TBaseType.rrw_drop, "text", "search", "template", " ", " ", " ", ESqlStatementType.sstpostgresqlDropTextSearchTemplate);
314        addCmd(TBaseType.rrw_drop, "transform", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropTransform);
315        addCmd(TBaseType.rrw_drop, "trigger", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropTrigger);
316        addCmd(TBaseType.rrw_drop, "type", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropType);
317        addCmd(TBaseType.rrw_drop, "user", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropUser);
318        addCmd(TBaseType.rrw_drop, "user", "mapping", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropUserMapping);
319        addCmd(TBaseType.rrw_drop, "view", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlDropView);
320
321        addCmd(TBaseType.rrw_end, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlEnd);
322
323        addCmd(TBaseType.rrw_execute, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlExecute);
324
325        addCmd(TBaseType.rrw_explain, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlExplain);
326
327        addCmd(TBaseType.rrw_fetch, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstFetchFrom);
328
329        addCmd(TBaseType.rrw_grant, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlGrant);
330        addCmd(TBaseType.rrw_postgresql_import, "foreign", "schema", " ", " ", " ", " ", ESqlStatementType.sstPostgresqlImport);
331        addCmd(TBaseType.rrw_insert, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstinsert);
332
333        addCmd(TBaseType.rrw_postgresql_listen, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlListen);
334
335        addCmd(TBaseType.rrw_load, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlLoad);
336
337        addCmd(TBaseType.rrw_lock, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlLock);
338        addCmd(TBaseType.rrw_merge," "," "," "," "," "," ", ESqlStatementType.sstmerge);
339
340        addCmd(TBaseType.rrw_move, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlMove);
341
342        addCmd(TBaseType.rrw_postgresql_notify, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlNotify);
343
344        addCmd(TBaseType.rrw_plpgsql_function_delimiter, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstPostgresqlBlock);
345
346
347        addCmd(TBaseType.rrw_prepare, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlPrepare);
348
349        addCmd(TBaseType.rrw_prepare, "transaction", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlPrepareTransaction);
350
351        addCmd(TBaseType.rrw_postgresql_reassign, "owned", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlReassignOwned);
352
353        addCmd(TBaseType.rrw_refresh, "incremental","materialized", "view",  " ", " ", " ", ESqlStatementType.sstpostgresqlRefreshMaterializedView);
354        addCmd(TBaseType.rrw_refresh, "materialized", "view", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlRefreshMaterializedView);
355
356        addCmd(TBaseType.rrw_postgresql_reindex, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstReindex);
357
358        addCmd(TBaseType.rrw_release, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlReleaseSavepoint);
359        addCmd(TBaseType.rrw_release, "savepoint", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlReleaseSavepoint);
360
361        addCmd(TBaseType.rrw_reset, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlReset);
362
363        addCmd(TBaseType.rrw_revoke, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlRevoke);
364
365        addCmd(TBaseType.rrw_rollback, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlRollback);
366        addCmd(TBaseType.rrw_rollback, "prepared", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlRollbackPrepared);
367        addCmd(TBaseType.rrw_rollback, "to", "savepoint", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlRollbackToSavepoint);
368        addCmd(TBaseType.rrw_savepoint, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstsavepoint);
369
370        addCmd(TBaseType.rrw_postgresql_security, "label", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlSecurityLabel);
371
372
373        addCmd(TBaseType.rrw_select, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstselect);
374
375        addCmd(TBaseType.rrw_set, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlSet);
376
377        addCmd(TBaseType.rrw_set, "constraints", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlSetConstraints);
378        addCmd(TBaseType.rrw_set, "local", "role", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlSetRole);
379        addCmd(TBaseType.rrw_set, "local", "session", "authorization", " ", " ", " ", ESqlStatementType.sstpostgresqlSetSessionAuthorization);
380        addCmd(TBaseType.rrw_set, "role", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlSetRole);
381        addCmd(TBaseType.rrw_set, "search_path", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlSetSearchPath);
382        addCmd(TBaseType.rrw_set, "session", "authorization", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlSetSessionAuthorization);
383        addCmd(TBaseType.rrw_set, "session", "characteristics", "as", "transaction", " ", " ", ESqlStatementType.sstpostgresqlSetTransaction);
384        addCmd(TBaseType.rrw_set, "session", "role", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlSetRole);
385        addCmd(TBaseType.rrw_set, "session", "session", "authorization", " ", " ", " ", ESqlStatementType.sstpostgresqlSetSessionAuthorization);
386
387        addCmd(TBaseType.rrw_set, "transaction", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlSetTransaction);
388        addCmd(TBaseType.rrw_show, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlShow);
389        addCmd(TBaseType.rrw_show, "search_path", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlShowSearchPath);
390        // addCmd(TBaseType.rrw_start, "transaction", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlStartTransaction);
391        addCmd(TBaseType.rrw_table, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstPostgresqlTable);
392        addCmd(TBaseType.rrw_start, "transaction", " ", " ", " ", " ", " ", ESqlStatementType.sstStartTransaction);
393        addCmd(TBaseType.rrw_truncate, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlTruncate);
394
395        addCmd(TBaseType.rrw_postgresql_unlisten, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstpostgresqlUnlisten);
396
397        addCmd(TBaseType.rrw_update, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstupdate);
398        addCmd(TBaseType.rrw_postgresql_vacuum, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstVacuum);
399        addCmd(TBaseType.rrw_values, " ", " ", " ", " ", " ", " ", ESqlStatementType.sstValues);
400    }
401
402    @Override
403    public TCustomSqlStatement issql(TSourceToken token, EFindSqlStateType state, TCustomSqlStatement currentStatement) {
404        // Extract from TSqlCmds.isgaussdb() lines 5656-6266
405        TCustomSqlStatement ret = null;
406        ESqlStatementType gnewsqlstatementtype = ESqlStatementType.sstinvalid;
407
408        if ((token.tokencode == TBaseType.cmtdoublehyphen)
409                || (token.tokencode == TBaseType.cmtslashstar)
410                || (token.tokencode == TBaseType.lexspace)
411                || (token.tokencode == TBaseType.lexnewline)
412                || (token.tokentype == ETokenType.ttsemicolon)) {
413            return null;
414        }
415
416        int lcpos = token.posinlist;
417        TSourceTokenList lcsourcetokenlist = token.container;
418        TCustomSqlStatement lccurrentsqlstatement = currentStatement;
419
420        //subquery after semicolon or at first line
421        if ((state == EFindSqlStateType.stnormal) && (token.tokentype == ETokenType.ttleftparenthesis)) // (
422        {
423            int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "(");
424            if (k > 0) {
425                ret = new TSelectSqlStatement(vendor);
426            } else {
427                k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_with, 1, "(");
428                if (k > 0) { // syntax like: (with ... )
429                    ret = new TSelectSqlStatement(vendor);
430                }
431            }
432
433            return ret;
434        }
435
436        //cte
437        if ((state == EFindSqlStateType.stnormal) && (token.tokencode == TBaseType.rrw_with)) {
438            ret = findcte(token);
439            if ((ret != null)) return ret;
440        }
441
442        gnewsqlstatementtype = getStatementTypeForToken(token);
443
444        TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
445        switch (gnewsqlstatementtype) {    //
446            case sstinvalid: {
447                ret = null;
448
449                if (state == EFindSqlStateType.stnormal) {
450                    if (token.tokencode == TBaseType.label_begin) {
451                        ret = new TCommonBlock(vendor);
452                        gnewsqlstatementtype = ret.sqlstatementtype;
453
454                    } else if (token.tokencode == TBaseType.rrw_declare) {
455                        ret = new TCommonBlock(vendor);
456                        gnewsqlstatementtype = ret.sqlstatementtype;
457                    } else if (token.tokencode == TBaseType.rrw_begin) {
458                        // https://support.huaweicloud.com/distributed-devg-v3-opengauss/gaussdb-12-0498.html
459                        // 有两种可能 1:开启匿名块,或 2:开启事务
460                        boolean isBlock = true;
461                        TSourceToken st = token.nextSolidToken();
462                        if (st != null) {
463                            if ((st.tokencode == ';')
464                                    || (st.toString().equalsIgnoreCase("work"))
465                                    || (st.toString().equalsIgnoreCase("transaction"))
466                            ) {
467                                isBlock = false;
468                            }
469                        }
470                        if (isBlock) {
471                            ret = new TCommonBlock(vendor);
472                            gnewsqlstatementtype = ret.sqlstatementtype;
473                        } else {
474                            ret = new TStartTransactionStmt(vendor);
475                            gnewsqlstatementtype = ret.sqlstatementtype;
476                            token.tokencode = TBaseType.GAUSSDB_BEGIN_TRANSACTION;
477                        }
478
479                    } else if (token.tokencode == TBaseType.rrw_procedure) {
480                        ret = new TCreateProcedureStmt(vendor);
481                        // ret.sqlstatementtype = ESqlStatementType.sstplsql_createprocedure;
482                        gnewsqlstatementtype = ret.sqlstatementtype;
483                    } else if (token.tokencode == TBaseType.rrw_function) {
484                        ret = new TPlsqlCreateFunction(vendor);
485                        // ret.sqlstatementtype = ESqlStatementType.sstplsql_createfunction;
486                        gnewsqlstatementtype = ret.sqlstatementtype;
487                    } else if (token.tokencode == TBaseType.rrw_package) {
488                        ret = new TPlsqlCreatePackage(vendor);
489                        // ret.sqlstatementtype = ESqlStatementType.sstplsql_createpackage;
490                        gnewsqlstatementtype = ret.sqlstatementtype;
491                    }
492                }
493                break;
494            }
495            case sstpostgresqlDeclare: {
496                // https://support.huaweicloud.com/distributed-devg-v3-opengauss/gaussdb-12-0554.html
497                // declare cursor_name [ BINARY ] [ NO SCROLL ] CURSOR ..., 这是单个的定义游标语句
498                // 下面这种类型的定义才是开始一个 匿名块
499                // [DECLARE [declare_statements]]
500                //BEGIN
501                //execution_statements
502                //END;
503
504                // 判断逻辑如下:
505                // 1. 如果 declare 后直接跟 CURSOR, 那就是开启一个 匿名块
506                // 2. 如果 declare 后直接跟的是一个 identifier, 那再检查之后的第2或3或4个token是否为 CURSOR,
507                // 如果是,该语句为 单个的定义游标语句,否则为  匿名块
508
509                boolean isBlock = true;
510                TSourceToken st = token.nextSolidToken();
511                if (st != null) {
512                    if (st.tokencode == TBaseType.GAUSSDB_CURSOR) {
513                        isBlock = true;
514                    } else if (st.tokencode == TBaseType.ident) {
515                        st = st.nextSolidToken();
516                        if (st != null) {
517                            if ((st.tokencode == TBaseType.GAUSSDB_CURSOR)
518                                    || (st.tokencode == TBaseType.rrw_binary)
519                                    || (st.toString().equalsIgnoreCase("no"))
520                            ) {
521                                isBlock = false;
522                            }
523                        }
524                    }
525                }
526                if (isBlock) {
527                    ret = new TCommonBlock(vendor);
528                    gnewsqlstatementtype = ret.sqlstatementtype;
529                } else {
530                    ret = new TDeclareCursorStmt(vendor);
531                    gnewsqlstatementtype = ret.sqlstatementtype;
532                    token.tokencode = TBaseType.GAUSSDB_DECLARE_SINGLE_STMT;
533                }
534
535                break;
536            }
537            case sstmerge: {
538                ret = new TMergeSqlStatement(vendor);
539                ret.sqlstatementtype = gnewsqlstatementtype;
540                break;
541            }
542            case sstcreatesynonym:
543                ret = new TCreateSynonymStmt(vendor);
544                break;
545            case sstdropsynonym:
546                ret = new TDropSynonymStmt(vendor);
547                break;
548            case sstAlterPackage:
549                ret = new TAlterPackageStmt(vendor);
550                break;
551            case sstpostgresqlRefreshMaterializedView:
552                ret = new TRefreshMaterializedViewStmt(vendor);
553                break;
554            case sstAlterSynonym:
555                ret = new TAlterSynonymStmt(vendor);
556                break;
557            case sstsavepoint: {
558                ret = new TSavepointStmt(vendor);
559                ret.sqlstatementtype = gnewsqlstatementtype;
560                break;
561            }
562            case sstselect: {
563                boolean lcisnewsql = true;
564
565                if (state != EFindSqlStateType.stnormal) {
566                    // lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
567                    if ((lcprevsolidtoken != null)) {
568                        if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis)
569                            lcisnewsql = false; //subqery
570                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union)
571                            lcisnewsql = false;
572                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect)
573                            lcisnewsql = false;
574                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus)
575                            lcisnewsql = false;
576                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except)
577                            lcisnewsql = false;
578                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return)
579                            lcisnewsql = false;
580                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) {
581                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable)
582                                lcisnewsql = false;
583                            if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview)
584                                lcisnewsql = false;
585                        }
586
587                        if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) {
588                            TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist);
589                            if ((lcpprevsolidtoken != null)) {
590                                if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union)
591                                    lcisnewsql = false;
592                            }
593                        }
594
595                    }
596
597
598                    if ((lccurrentsqlstatement != null)) {
599                        if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert)
600                            lcisnewsql = false;
601                    }
602
603                }
604
605                if (lcisnewsql)
606                    ret = new TSelectSqlStatement(vendor);
607
608                break;
609            }
610            case sstinsert: {
611                boolean lcisnewsql = true;
612                if (state != EFindSqlStateType.stnormal) {
613                    if ((lccurrentsqlstatement != null)) {
614
615                    }
616                }
617
618                if (lcisnewsql)
619                    ret = new TInsertSqlStatement(vendor);
620
621                break;
622            }
623            case sstupdate: {
624                boolean lcisnewsql = true;
625                if (state != EFindSqlStateType.stnormal) {
626                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
627                    if ((lcprevsolidtoken != null)) { //
628                        if (lcprevsolidtoken.tokencode == TBaseType.rrw_on)
629                            lcisnewsql = false;
630                        else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for)
631                            lcisnewsql = false;
632                    }
633
634                    TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false);
635                    if ((lcnextsolidtoken != null)) {
636                        if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) {
637                            int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "(");
638                            if (k == 0) lcisnewsql = false;
639                        }
640                    }
641
642
643                    if ((lccurrentsqlstatement != null)) {
644                    }
645                }
646
647                if (lcisnewsql) {
648                    ret = new TUpdateSqlStatement(vendor);
649                    ret.dummytag = 1; // means set clause in update is not found yet, used to seperate set clause from set statement
650                }
651                break;
652            }
653            case sstdelete: {
654                boolean lcisnewsql = true;
655
656                if (state != EFindSqlStateType.stnormal) {
657                    lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos);
658                    if ((lcprevsolidtoken != null)) {
659                        if (lcprevsolidtoken.tokencode == TBaseType.rrw_on)
660                            lcisnewsql = false;
661                    }
662
663                    if ((lccurrentsqlstatement != null)) {
664                    }
665                }
666
667                if (lcisnewsql)
668                    ret = new TDeleteSqlStatement(vendor);
669
670                break;
671            }
672            case sstoraclecommit: {
673                ret = new TUnknownSqlStatement(vendor);
674                ret.sqlstatementtype = gnewsqlstatementtype;
675                break;
676            }
677            case sstoraclerollback: {
678                ret = new TUnknownSqlStatement(vendor);
679                ret.sqlstatementtype = gnewsqlstatementtype;
680                break;
681            }
682            case sstoraclesavepoint: {
683                ret = new TUnknownSqlStatement(vendor);
684                ret.sqlstatementtype = gnewsqlstatementtype;
685                break;
686            }
687            case sstoraclerevoke: {
688                ret = new TUnknownSqlStatement(vendor);
689                ret.sqlstatementtype = gnewsqlstatementtype;
690                break;
691            }
692            case sstoraclegrant: {
693                ret = new TUnknownSqlStatement(vendor);
694                //ret = new TGrantStmt(vendor);
695                ret.sqlstatementtype = gnewsqlstatementtype;
696                break;
697            }
698            case sstoracleanalyze: {
699                ret = new TUnknownSqlStatement(vendor);
700                ret.sqlstatementtype = gnewsqlstatementtype;
701                break;
702            }
703            case sstoracletruncate: {
704                ret = new TUnknownSqlStatement(vendor);
705                ret.sqlstatementtype = gnewsqlstatementtype;
706                break;
707            }
708            case sstcreatetable: {
709                ret = new TCreateTableSqlStatement(vendor);
710                break;
711            }
712            case sstoraclecreateview: {
713                ret = new TCreateViewSqlStatement(vendor);
714                break;
715            }
716            case sstcreatematerializedview: {
717                ret = new TCreateMaterializedSqlStatement(vendor);
718                break;
719            }
720            case sstoraclecreateindex: {
721                ret = new TCreateIndexSqlStatement(vendor);
722                break;
723            }
724            case sstoraclecreatedatabase: {
725                ret = new TCreateDatabaseSqlStatement(vendor);
726                break;
727            }
728            case sstoracledroptable: {
729                ret = new TDropTableSqlStatement(vendor);
730                break;
731            }
732            case sstoracledropview: {
733                ret = new TDropViewSqlStatement(vendor);
734                break;
735            }
736            case sstoracledropindex: {
737                ret = new TDropIndexSqlStatement(vendor);
738                break;
739            }
740            case sstaltertable: {
741                ret = new TAlterTableStatement(vendor);
742                break;
743            }
744            case sstoraclealtersession: {
745                ret = new TAlterSessionStatement(vendor);
746                break;
747            }
748            case sstplsql_createprocedure: {
749                ret = new TPlsqlCreateProcedure(vendor);
750                ret.sqlstatementtype = gnewsqlstatementtype;
751                // System.out.println(gnewsqlstatementtype);
752                break;
753            }
754            case sstplsql_createfunction: {
755                ret = new TPlsqlCreateFunction(vendor);
756                ret.sqlstatementtype = gnewsqlstatementtype;
757                // System.out.println(gnewsqlstatementtype);
758                break;
759            }
760            case sstplsql_createpackage: {
761                ret = new TPlsqlCreatePackage(vendor);
762                ret.sqlstatementtype = gnewsqlstatementtype;
763                // System.out.println(gnewsqlstatementtype);
764                break;
765            }
766            case sstoraclecreatepackagebody: {
767                ret = new TPlsqlCreatePackage(vendor);
768                ret.sqlstatementtype = gnewsqlstatementtype;
769                //ret.sqlstatementtype = ESqlStatementType.sstplsql_createpackage;
770                break;
771            }
772            case sstplsql_createtrigger: {
773                ret = new TPlsqlCreateTrigger(vendor);
774                ret.sqlstatementtype = gnewsqlstatementtype;
775                // System.out.println(gnewsqlstatementtype);
776                break;
777            }
778            case sstplsql_execimmestmt: {
779                ret = new TExecImmeStmt(vendor);
780                // ret.sqlstatementtype = gnewsqlstatementtype;
781                // System.out.println(gnewsqlstatementtype);
782                break;
783            }
784            case sstplsql_createtype_placeholder: {
785                ret = new TPlsqlCreateType_Placeholder(vendor);
786                ret.sqlstatementtype = gnewsqlstatementtype;
787                // System.out.println(gnewsqlstatementtype);
788                break;
789            }
790            case sstplsql_createtypebody: {
791                ret = new TPlsqlCreateTypeBody(vendor);
792                ret.sqlstatementtype = gnewsqlstatementtype;
793                break;
794            }
795            case sstCommentOn: {
796                ret = new TCommentOnSqlStmt(vendor);
797                break;
798            }
799            case sstoraclecreatesequence: {
800                ret = new TCreateSequenceStmt(vendor);
801                break;
802            }
803            case sstoraclecreatesynonym: {
804                ret = new TCreateSynonymStmt(vendor);
805                break;
806            }
807            case sstoraclecreatedirectory: {
808                ret = new TOracleCreateDirectoryStmt(vendor);
809                break;
810            }
811            case sstpostgresqlCreateIndex:
812                ret = new TCreateIndexSqlStatement(vendor);
813                break;
814            case sstpostgresqlCreateView:
815                ret = new TCreateViewSqlStatement(vendor);
816                break;
817            case sstpostgresqlCreateFunction:
818                ret = new TCreateFunctionStmt(vendor);
819                break;
820            case sstcreatetrigger:
821                ret = new TCreateTriggerStmt(vendor);
822                break;
823            case sstpostgresqlMove:
824                ret = new TMoveStmt(vendor);
825                break;
826            case sstpostgresqlTruncate:
827                ret = new TTruncateStatement(vendor);
828                break;
829            case sstpostgresqlExecute:
830                ret = new TExecuteSqlStatement(vendor);
831                break;
832            case sstpostgresqlDropTable:
833                ret = new TDropTableSqlStatement(vendor);
834                break;
835            case sstPostgresqlBlock:
836                ret = new TCommonBlock(vendor);
837                break;
838            case sstVacuum:
839                ret = new TVacuumStmt(vendor);
840                break;
841            case sstReindex:
842                ret = new TReindexStmt(vendor);
843                break;
844            case sstcreateprocedure:
845                ret = new TCreateProcedureStmt(vendor);
846                break;
847            case sstpostgresqlCommit:
848                ret = new TCommitStmt(vendor);
849                break;
850            case sstpostgresqlCreateSchema:
851                ret = new TCreateSchemaSqlStatement(vendor);
852                break;
853            case sstpostgresqlDropSchema:
854                ret = new TDropSchemaSqlStatement(vendor);
855                break;
856            case sstpostgresqlShowSearchPath:
857                ret = new TShowSearchPathStmt(vendor);
858                break;
859            case sstpostgresqlCopy:
860                ret = new TCopyStmt(vendor);
861                break;
862            case sstcall:
863                ret = new TCallStatement(vendor);
864                break;
865            case sstpostgresqlAlterSchema:
866                ret = new TAlterSchemaStmt(vendor);
867                break;
868            case sstpostgresqlAlterfunction:
869                ret = new TAlterFunctionStmt(vendor);
870                break;
871            case sstStartTransaction: {
872                ret = new TStartTransactionStmt(vendor);
873                break;
874            }
875            case sstpostgresqlComment:
876                ret = new TCommentOnSqlStmt(vendor);
877                break;
878            case sstpostgresqlShow:
879                ret = new TShowStmt(vendor);
880                break;
881            case sstpostgresqlSetSearchPath:
882            case sstpostgresqlSet:
883                ret = new TSetStmt(vendor);
884                break;
885            case sstpostgresqlDropFunction:
886                ret = new TDropFunctionStmt(vendor);
887                break;
888            case sstpostgresqlDropTrigger:
889                ret = new TDropTriggerSqlStatement(vendor);
890                break;
891            case sstpostgresqlDropProcedure:
892                ret = new TDropProcedureStmt(vendor);
893                break;
894            case sstdropindex:
895                ret = new TDropIndexSqlStatement(vendor);
896                break;
897            case sstpostgresqlDropSequence:
898                ret = new TDropSequenceStmt(vendor);
899                break;
900            case sstpostgresqlDropView:
901                ret = new TDropViewSqlStatement(vendor);
902                break;
903            case sstpostgresqlCreateSequence:
904                ret = new TCreateSequenceStmt(vendor);
905                break;
906            case sstpostgresqlCreateType:
907                ret = new TCreateTypeStmt(vendor);
908                break;
909            case sstcreateExtension:
910                ret = new TCreateExtensionStmt(vendor);
911                break;
912            case sstPostgresqlTable:
913                ret = new TPostgresqlTableStmt(vendor);
914                break;
915            case sstpostgresqlEnd:
916                ret = new TEndTran(vendor);
917                break;
918            case sstpostgresqlDo:
919                boolean lcisnewsql = false;
920
921                if (state == EFindSqlStateType.stnormal) {
922                    TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false);
923                    if ((lcnextsolidtoken != null)) {
924                        if (lcnextsolidtoken.tokencode == TBaseType.rrw_postgresql_function_delimiter)
925                            lcisnewsql = true;
926                    }
927                }
928
929                if (lcisnewsql)
930                    ret = new TDoExecuteBlockStmt(vendor);
931
932                break;
933            default: {
934                ret = new TUnknownSqlStatement(vendor);
935                ret.sqlstatementtype = gnewsqlstatementtype;
936                break;
937            }
938        }    // case
939
940        return ret;
941    }
942}