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