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