001package gudusoft.gsqlparser.sqlcmds; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.stmt.*; 005import gudusoft.gsqlparser.stmt.postgresql.*; 006 007/** 008 * PostgreSQL SQL command resolver. 009 * Handles PostgreSQL statement recognition including PL/pgSQL. 010 * 011 * @since 3.1.0.9 012 */ 013public class TSqlCmdsPostgresql extends AbstractSqlCmds { 014 015 016 public TSqlCmdsPostgresql() { 017 super(EDbVendor.dbvpostgresql); 018 } 019 020 @Override 021 protected void initializeCommands() { 022 // PostgreSQL commands must be sorted alphabetically by token1 023 024 // ABORT 025 addCmd(TBaseType.rrw_abort, ESqlStatementType.sstpostgresqlabort); 026 027 // ALTER commands 028 addCmd(TBaseType.rrw_alter, "aggregate", ESqlStatementType.sstpostgresqlAlterAggregate); 029 addCmd(TBaseType.rrw_alter, "collation", ESqlStatementType.sstpostgresqlAlterCollation); 030 addCmd(TBaseType.rrw_alter, "conversion", ESqlStatementType.sstpostgresqlAlterConversion); 031 addCmd(TBaseType.rrw_alter, "database", ESqlStatementType.sstpostgresqlalterdatabase); 032 addCmd(TBaseType.rrw_alter, "default", "privileges", ESqlStatementType.sstpostgresqlAlterDefaultPrivileges); 033 addCmd(TBaseType.rrw_alter, "domain", ESqlStatementType.sstpostgresqlAlterDomain); 034 addCmd(TBaseType.rrw_alter, "event", "trigger", ESqlStatementType.sstpostgresqlAlterEventTrigger); 035 addCmd(TBaseType.rrw_alter, "extension", ESqlStatementType.sstpostgresqlAlterExtension); 036 addCmd(TBaseType.rrw_alter, "foreign", "data", "wrapper", ESqlStatementType.sstpostgresqlAlterForeignDataWrapper); 037 addCmd(TBaseType.rrw_alter, "foreign", "Table", ESqlStatementType.sstpostgresqlAlterForeignTable); 038 addCmd(TBaseType.rrw_alter, "function", ESqlStatementType.sstpostgresqlAlterfunction); 039 addCmd(TBaseType.rrw_alter, "group", ESqlStatementType.sstpostgresqlAlterGroup); 040 addCmd(TBaseType.rrw_alter, "index", ESqlStatementType.sstpostgresqlAlterIndex); 041 addCmd(TBaseType.rrw_alter, "language", ESqlStatementType.sstpostgresqlAlterLanguage); 042 addCmd(TBaseType.rrw_alter, "large", "object", ESqlStatementType.sstpostgresqlAlterLargeObject); 043 addCmd(TBaseType.rrw_alter, "materialized", "view", ESqlStatementType.sstpostgresqlAlterMaterializedView); 044 addCmd(TBaseType.rrw_alter, "operator", ESqlStatementType.sstpostgresqlAlterOperator); 045 addCmd(TBaseType.rrw_alter, "operator", "class", ESqlStatementType.sstpostgresqlAlterOperatorClass); 046 addCmd(TBaseType.rrw_alter, "operator", "family", ESqlStatementType.sstpostgresqlAlterOperatorFamily); 047 addCmd(TBaseType.rrw_alter, "policy", ESqlStatementType.sstpostgresqlAlterPolicy); 048 addCmd(TBaseType.rrw_alter, "procedural", "language", ESqlStatementType.sstpostgresqlAlterLanguage); 049 addCmd(TBaseType.rrw_alter, "procedure", ESqlStatementType.sstpostgresqlAlterProcedure); 050 addCmd(TBaseType.rrw_alter, "publication", ESqlStatementType.sstpostgresqlAlterPublication); 051 addCmd(TBaseType.rrw_alter, "role", ESqlStatementType.sstpostgresqlAlterRole); 052 addCmd(TBaseType.rrw_alter, "routine", ESqlStatementType.sstpostgresqlAlterRoutine); 053 addCmd(TBaseType.rrw_alter, "rule", ESqlStatementType.sstpostgresqlAlterRule); 054 addCmd(TBaseType.rrw_alter, "schema", ESqlStatementType.sstpostgresqlAlterSchema); 055 addCmd(TBaseType.rrw_alter, "sequence", ESqlStatementType.sstpostgresqlAlterSequence); 056 addCmd(TBaseType.rrw_alter, "server", ESqlStatementType.sstpostgresqlAlterServer); 057 addCmd(TBaseType.rrw_alter, "statistics", ESqlStatementType.sstpostgresqlAlterStatistics); 058 addCmd(TBaseType.rrw_alter, "subscription", ESqlStatementType.sstpostgresqlAlterSubscription); 059 addCmd(TBaseType.rrw_alter, "system", ESqlStatementType.sstpostgresqlAlterSystem); 060 addCmd(TBaseType.rrw_alter, "table", ESqlStatementType.sstaltertable); 061 addCmd(TBaseType.rrw_alter, "tablespace", ESqlStatementType.sstpostgresqlAlterTablespace); 062 addCmd(TBaseType.rrw_alter, "text", "search", "configuration", ESqlStatementType.sstpostgresqlAlterTextSearchConfiguration); 063 addCmd(TBaseType.rrw_alter, "text", "search", "dictionary", ESqlStatementType.sstpostgresqlAlterTextSearchDictionary); 064 addCmd(TBaseType.rrw_alter, "text", "search", "parser", ESqlStatementType.sstpostgresqlAlterTextSearchParser); 065 addCmd(TBaseType.rrw_alter, "text", "search", "template", ESqlStatementType.sstpostgresqlAlterTextSearchTemplate); 066 addCmd(TBaseType.rrw_alter, "trigger", ESqlStatementType.sstpostgresqlAlterTrigger); 067 addCmd(TBaseType.rrw_alter, "type", ESqlStatementType.sstpostgresqlAlterType); 068 addCmd(TBaseType.rrw_alter, "user", ESqlStatementType.sstpostgresqlAlterUser); 069 addCmd(TBaseType.rrw_alter, "user", "mapping", ESqlStatementType.sstpostgresqlAlterUserMapping); 070 addCmd(TBaseType.rrw_alter, "view", ESqlStatementType.sstpostgresqlAlterView); 071 072 // ANALYZE 073 addCmd(TBaseType.rrw_analyze, ESqlStatementType.sstpostgresqlAnalyze); 074 075 // BEGIN 076 addCmd(TBaseType.rrw_begin, ESqlStatementType.sstpostgresqlBegin); 077 078 // CALL 079 addCmd(TBaseType.rrw_call, ESqlStatementType.sstcall); 080 081 // CHECKPOINT, CLOSE 082 addCmd(TBaseType.rrw_checkpoint, ESqlStatementType.sstpostgresqlCheckpoint); 083 addCmd(TBaseType.rrw_close, ESqlStatementType.sstpostgresqlClose); 084 085 // CLUSTER 086 addCmd(TBaseType.rrw_postgresql_cluster, ESqlStatementType.sstpostgresqlCluster); 087 088 // COMMENT 089 addCmd(TBaseType.rrw_comment, ESqlStatementType.sstpostgresqlComment); 090 091 // COMMIT 092 addCmd(TBaseType.rrw_commit, ESqlStatementType.sstpostgresqlCommit); 093 addCmd(TBaseType.rrw_commit, "prepared", ESqlStatementType.sstpostgresqlCommitPrepared); 094 095 // COPY 096 addCmd(TBaseType.rrw_postgresql_copy, ESqlStatementType.sstpostgresqlCopy); 097 098 // CREATE commands 099 addCmd(TBaseType.rrw_create, "access", "method", ESqlStatementType.sstpostgresqlCreateAccessMethod); 100 addCmd(TBaseType.rrw_create, "aggregate", ESqlStatementType.sstpostgresqlCreateAggregate); 101 addCmd(TBaseType.rrw_create, "assertion", ESqlStatementType.sstpostgresqlCreateAssertion); 102 addCmd(TBaseType.rrw_create, "cast", ESqlStatementType.sstpostgresqlCreateCast); 103 addCmd(TBaseType.rrw_create, "collation", ESqlStatementType.sstpostgresqlCreateCollation); 104 addCmd(TBaseType.rrw_create, "constraint", "trigger", ESqlStatementType.sstcreatetrigger); 105 addCmd(TBaseType.rrw_create, "conversion", ESqlStatementType.sstpostgresqlConversion); 106 addCmd(TBaseType.rrw_create, "database", ESqlStatementType.sstpostgresqlCreateDatabase); 107 addCmd(TBaseType.rrw_create, "default", "conversion", ESqlStatementType.sstpostgresqlConversion); 108 addCmd(TBaseType.rrw_create, "domain", ESqlStatementType.sstpostgresqlCreateDomain); 109 addCmd(TBaseType.rrw_create, "event", "trigger", ESqlStatementType.sstpostgresqlCreateEventTrigger); 110 addCmd(TBaseType.rrw_create, "extension", ESqlStatementType.sstcreateExtension); 111 addCmd(TBaseType.rrw_create, "foreign", "data", "wrapper", ESqlStatementType.sstpostgresqlCreateForeignDataWrapper); 112 addCmd(TBaseType.rrw_create, "foreign", "table", ESqlStatementType.sstpostgresqlCreateForeignTable); 113 addCmd(TBaseType.rrw_create, "function", ESqlStatementType.sstpostgresqlCreateFunction); 114 addCmd(TBaseType.rrw_create, "global", "temp", "table", ESqlStatementType.sstcreatetable); 115 addCmd(TBaseType.rrw_create, "global", "temporary", "table", ESqlStatementType.sstcreatetable); 116 addCmd(TBaseType.rrw_create, "global", "unlocked", "table", ESqlStatementType.sstcreatetable); 117 addCmd(TBaseType.rrw_create, "group", ESqlStatementType.sstpostgresqlCreateGroup); 118 addCmd(TBaseType.rrw_create, "index", ESqlStatementType.sstpostgresqlCreateIndex); 119 addCmd(TBaseType.rrw_create, "language", ESqlStatementType.sstpostgresqlCreateLanguage); 120 addCmd(TBaseType.rrw_create, "local", "temp", "table", ESqlStatementType.sstcreatetable); 121 addCmd(TBaseType.rrw_create, "local", "temporary", "table", ESqlStatementType.sstcreatetable); 122 addCmd(TBaseType.rrw_create, "local", "unlocked", "table", ESqlStatementType.sstcreatetable); 123 addCmd(TBaseType.rrw_create, "materialized", "view", ESqlStatementType.sstcreatematerializedview); 124 addCmd(TBaseType.rrw_create, "operator", ESqlStatementType.sstpostgresqlCreateOperator); 125 addCmd(TBaseType.rrw_create, "operator", "class", ESqlStatementType.sstpostgresqlCreateOperatorClass); 126 addCmd(TBaseType.rrw_create, "operator", "family", ESqlStatementType.sstpostgresqlCreateOperatorFimaly); 127 addCmd(TBaseType.rrw_create, "or", "replace", "function", ESqlStatementType.sstpostgresqlCreateFunction); 128 addCmd(TBaseType.rrw_create, "or", "replace", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 129 addCmd(TBaseType.rrw_create, "or", "replace", "procedural", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 130 addCmd(TBaseType.rrw_create, "or", "replace", "procedure", ESqlStatementType.sstcreateprocedure); 131 addCmd(TBaseType.rrw_create, "or", "replace", "role ", ESqlStatementType.sstpostgresqlCreateRole); 132 addCmd(TBaseType.rrw_create, "or", "replace", "rule ", ESqlStatementType.sstpostgresqlCreateRule); 133 addCmd(TBaseType.rrw_create, "or", "replace", "temp", "view", ESqlStatementType.sstpostgresqlCreateView); 134 addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "view", ESqlStatementType.sstpostgresqlCreateView); 135 addCmd(TBaseType.rrw_create, "or", "replace", "trigger", ESqlStatementType.sstcreatetrigger); 136 addCmd(TBaseType.rrw_create, "or", "replace", "trusted", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 137 addCmd(TBaseType.rrw_create, "or", "replace", "trusted", "procedural", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 138 addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstpostgresqlCreateView); 139 addCmd(TBaseType.rrw_create, "policy", ESqlStatementType.sstpostgresqlCreatePolicy); 140 addCmd(TBaseType.rrw_create, "procedural", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 141 addCmd(TBaseType.rrw_create, "procedure", ESqlStatementType.sstcreateprocedure); 142 addCmd(TBaseType.rrw_create, "publication", ESqlStatementType.sstpostgresqlCreatePublication); 143 addCmd(TBaseType.rrw_create, "recursive", "view", ESqlStatementType.sstpostgresqlCreateView); 144 addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstpostgresqlCreateRole); 145 addCmd(TBaseType.rrw_create, "rule", ESqlStatementType.sstpostgresqlCreateRule); 146 addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstpostgresqlCreateSchema); 147 addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstpostgresqlCreateSequence); 148 addCmd(TBaseType.rrw_create, "server", ESqlStatementType.sstpostgresqlCreateServer); 149 addCmd(TBaseType.rrw_create, "statistics", ESqlStatementType.sstpostgresqlCreateStatistics); 150 addCmd(TBaseType.rrw_create, "subscription", ESqlStatementType.sstpostgresqlCreateSubscription); 151 addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable); 152 addCmd(TBaseType.rrw_create, "tablespace", ESqlStatementType.sstpostgresqlCreateTablespace); 153 addCmd(TBaseType.rrw_create, "temp", "sequence", ESqlStatementType.sstpostgresqlCreateSequence); 154 addCmd(TBaseType.rrw_create, "temp", "table", ESqlStatementType.sstcreatetable); 155 addCmd(TBaseType.rrw_create, "temp", "view", ESqlStatementType.sstpostgresqlCreateView); 156 addCmd(TBaseType.rrw_create, "temporary", "sequence", ESqlStatementType.sstpostgresqlCreateSequence); 157 addCmd(TBaseType.rrw_create, "temporary", "table", ESqlStatementType.sstcreatetable); 158 addCmd(TBaseType.rrw_create, "temporary", "view", ESqlStatementType.sstpostgresqlCreateView); 159 addCmd(TBaseType.rrw_create, "text", "search", "configuration", ESqlStatementType.sstpostgresqlCreateTextSearchConfiguration); 160 addCmd(TBaseType.rrw_create, "text", "search", "dictionary", ESqlStatementType.sstpostgresqlCreateTextSearchDictionary); 161 addCmd(TBaseType.rrw_create, "text", "search", "parser", ESqlStatementType.sstpostgresqlCreateTextSearchParser); 162 addCmd(TBaseType.rrw_create, "text", "search", "template", ESqlStatementType.sstpostgresqlCreateTextSearchTemplate); 163 addCmd(TBaseType.rrw_create, "transform", ESqlStatementType.sstpostgresqlCreateTransform); 164 addCmd(TBaseType.rrw_create, "trigger", ESqlStatementType.sstcreatetrigger); 165 addCmd(TBaseType.rrw_create, "trusted", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 166 addCmd(TBaseType.rrw_create, "trusted", "procedural", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 167 addCmd(TBaseType.rrw_create, "type", ESqlStatementType.sstpostgresqlCreateType); 168 addCmd(TBaseType.rrw_create, "unique", "index", ESqlStatementType.sstpostgresqlCreateIndex); 169 addCmd(TBaseType.rrw_create, "unlocked", "table", ESqlStatementType.sstcreatetable); 170 addCmd(TBaseType.rrw_create, "unlogged", "sequence", ESqlStatementType.sstpostgresqlCreateSequence); 171 addCmd(TBaseType.rrw_create, "unlogged", "table", ESqlStatementType.sstcreatetable); 172 addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstpostgresqlCreateUser); 173 addCmd(TBaseType.rrw_create, "user", "mapping", ESqlStatementType.sstpostgresqlCreateUserMapping); 174 addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstpostgresqlCreateView); 175 176 // DEALLOCATE, DECLARE, DELETE 177 addCmd(TBaseType.rrw_deallocate, ESqlStatementType.sstpostgresqlDeallocate); 178 addCmd(TBaseType.rrw_declare, ESqlStatementType.sstpostgresqlDeclare); 179 addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete); 180 181 // DISCARD, DO 182 addCmd(TBaseType.rrw_postgresql_discard, ESqlStatementType.sstpostgresqlDiscard); 183 addCmd(TBaseType.rrw_do, ESqlStatementType.sstpostgresqlDo); 184 185 // DROP commands 186 addCmd(TBaseType.rrw_drop, "access", "method", ESqlStatementType.sstpostgresqlDropAccessMethod); 187 addCmd(TBaseType.rrw_drop, "aggregate", ESqlStatementType.sstpostgresqlDropAggregate); 188 addCmd(TBaseType.rrw_drop, "assertion", ESqlStatementType.sstpostgresqlDropAssertion); 189 addCmd(TBaseType.rrw_drop, "cast", ESqlStatementType.sstpostgresqlDropCast); 190 addCmd(TBaseType.rrw_drop, "collation", ESqlStatementType.sstpostgresqlDropCollation); 191 addCmd(TBaseType.rrw_drop, "conversion", ESqlStatementType.sstpostgresqlDropConversion); 192 addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstpostgresqlDropDatabase); 193 addCmd(TBaseType.rrw_drop, "domain", ESqlStatementType.sstpostgresqlDropDomain); 194 addCmd(TBaseType.rrw_drop, "event", "trigger", ESqlStatementType.sstpostgresqlDropEventTrigger); 195 addCmd(TBaseType.rrw_drop, "extension", ESqlStatementType.sstpostgresqlDropExtension); 196 addCmd(TBaseType.rrw_drop, "external", "table", ESqlStatementType.sstpostgresqlDropTable); 197 addCmd(TBaseType.rrw_drop, "foreign", "data", "wrapper", ESqlStatementType.sstpostgresqlDropForeignDataWrapper); 198 addCmd(TBaseType.rrw_drop, "foreign", "table", ESqlStatementType.sstpostgresqlDropForeignTable); 199 addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstpostgresqlDropFunction); 200 addCmd(TBaseType.rrw_drop, "group", ESqlStatementType.sstpostgresqlDropGroup); 201 addCmd(TBaseType.rrw_drop, "index", ESqlStatementType.sstdropindex); 202 addCmd(TBaseType.rrw_drop, "language", ESqlStatementType.sstpostgresqlDropLanguage); 203 addCmd(TBaseType.rrw_drop, "materialized", "view", ESqlStatementType.sstpostgresqlDropMaterializedView); 204 addCmd(TBaseType.rrw_drop, "operator", ESqlStatementType.sstpostgresqlDropOperator); 205 addCmd(TBaseType.rrw_drop, "operator", "class", ESqlStatementType.sstpostgresqlDropOperatorClass); 206 addCmd(TBaseType.rrw_drop, "operator", "family ", ESqlStatementType.sstpostgresqlDropOperatorFamily); 207 addCmd(TBaseType.rrw_drop, "owned", ESqlStatementType.sstpostgresqlDropOwned); 208 addCmd(TBaseType.rrw_drop, "policy", ESqlStatementType.sstpostgresqlDropPolicy); 209 addCmd(TBaseType.rrw_drop, "procedural", "language", ESqlStatementType.sstpostgresqlDropLanguage); 210 addCmd(TBaseType.rrw_drop, "procedure", ESqlStatementType.sstpostgresqlDropProcedure); 211 addCmd(TBaseType.rrw_drop, "publication", ESqlStatementType.sstpostgresqlDropPublication); 212 addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstpostgresqlDropRole); 213 addCmd(TBaseType.rrw_drop, "routine", ESqlStatementType.sstpostgresqlDropRoutine); 214 addCmd(TBaseType.rrw_drop, "rule", ESqlStatementType.sstpostgresqlDropRule); 215 addCmd(TBaseType.rrw_drop, "schema", ESqlStatementType.sstpostgresqlDropSchema); 216 addCmd(TBaseType.rrw_drop, "sequence", ESqlStatementType.sstpostgresqlDropSequence); 217 addCmd(TBaseType.rrw_drop, "server", ESqlStatementType.sstpostgresqlDropServer); 218 addCmd(TBaseType.rrw_drop, "statistics", ESqlStatementType.sstpostgresqlDropStatistics); 219 addCmd(TBaseType.rrw_drop, "subscription", ESqlStatementType.sstpostgresqlDropSubscription); 220 addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstpostgresqlDropTable); 221 addCmd(TBaseType.rrw_drop, "tablespace", ESqlStatementType.sstpostgresqlDropTablespace); 222 addCmd(TBaseType.rrw_drop, "text", "search", "configuration", ESqlStatementType.sstpostgresqlDropTextSearchConfiguration); 223 addCmd(TBaseType.rrw_drop, "text", "search", "dictionary", ESqlStatementType.sstpostgresqlDropTextSearchDictionary); 224 addCmd(TBaseType.rrw_drop, "text", "search", "parser", ESqlStatementType.sstpostgresqlDropTextSearchParser); 225 addCmd(TBaseType.rrw_drop, "text", "search", "template", ESqlStatementType.sstpostgresqlDropTextSearchTemplate); 226 addCmd(TBaseType.rrw_drop, "transform", ESqlStatementType.sstpostgresqlDropTransform); 227 addCmd(TBaseType.rrw_drop, "trigger", ESqlStatementType.sstpostgresqlDropTrigger); 228 addCmd(TBaseType.rrw_drop, "type", ESqlStatementType.sstpostgresqlDropType); 229 addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstpostgresqlDropUser); 230 addCmd(TBaseType.rrw_drop, "user", "mapping", ESqlStatementType.sstpostgresqlDropUserMapping); 231 addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstpostgresqlDropView); 232 233 // END, EXECUTE, EXPLAIN 234 addCmd(TBaseType.rrw_end, ESqlStatementType.sstpostgresqlEnd); 235 addCmd(TBaseType.rrw_execute, ESqlStatementType.sstpostgresqlExecute); 236 addCmd(TBaseType.rrw_explain, ESqlStatementType.sstpostgresqlExplain); 237 238 // FETCH, GRANT 239 addCmd(TBaseType.rrw_fetch, ESqlStatementType.sstFetchFrom); 240 addCmd(TBaseType.rrw_grant, ESqlStatementType.sstpostgresqlGrant); 241 242 // IMPORT 243 addCmd(TBaseType.rrw_postgresql_import, "foreign", "schema", ESqlStatementType.sstPostgresqlImport); 244 245 // INSERT 246 addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert); 247 248 // LISTEN, LOAD, LOCK 249 addCmd(TBaseType.rrw_postgresql_listen, ESqlStatementType.sstpostgresqlListen); 250 addCmd(TBaseType.rrw_load, ESqlStatementType.sstpostgresqlLoad); 251 addCmd(TBaseType.rrw_lock, ESqlStatementType.sstpostgresqlLock); 252 253 // MERGE, MOVE 254 addCmd(TBaseType.rrw_merge, ESqlStatementType.sstmerge); 255 addCmd(TBaseType.rrw_move, ESqlStatementType.sstpostgresqlMove); 256 257 // NOTIFY 258 addCmd(TBaseType.rrw_postgresql_notify, ESqlStatementType.sstpostgresqlNotify); 259 260 // PL/pgSQL block 261 addCmd(TBaseType.rrw_plpgsql_function_delimiter, ESqlStatementType.sstPostgresqlBlock); 262 263 // PREPARE 264 addCmd(TBaseType.rrw_prepare, ESqlStatementType.sstpostgresqlPrepare); 265 addCmd(TBaseType.rrw_prepare, "transaction", ESqlStatementType.sstpostgresqlPrepareTransaction); 266 267 // REASSIGN, REFRESH, REINDEX 268 addCmd(TBaseType.rrw_postgresql_reassign, "owned", ESqlStatementType.sstpostgresqlReassignOwned); 269 addCmd(TBaseType.rrw_refresh, "materialized", "view", ESqlStatementType.sstpostgresqlRefreshMaterializedView); 270 addCmd(TBaseType.rrw_postgresql_reindex, ESqlStatementType.sstReindex); 271 272 // RELEASE, RESET, REVOKE 273 addCmd(TBaseType.rrw_release, ESqlStatementType.sstpostgresqlReleaseSavepoint); 274 addCmd(TBaseType.rrw_release, "savepoint", ESqlStatementType.sstpostgresqlReleaseSavepoint); 275 addCmd(TBaseType.rrw_reset, ESqlStatementType.sstpostgresqlReset); 276 addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstpostgresqlRevoke); 277 278 // ROLLBACK 279 addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstpostgresqlRollback); 280 addCmd(TBaseType.rrw_rollback, "prepared", ESqlStatementType.sstpostgresqlRollbackPrepared); 281 addCmd(TBaseType.rrw_rollback, "to", "savepoint", ESqlStatementType.sstpostgresqlRollbackToSavepoint); 282 283 // SAVEPOINT 284 addCmd(TBaseType.rrw_savepoint, ESqlStatementType.sstpostgresqlSavepoint); 285 286 // SECURITY LABEL 287 addCmd(TBaseType.rrw_postgresql_security, "label", ESqlStatementType.sstpostgresqlSecurityLabel); 288 289 // SELECT 290 addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect); 291 292 // SET commands 293 addCmd(TBaseType.rrw_set, ESqlStatementType.sstpostgresqlSet); 294 addCmd(TBaseType.rrw_set, "constraints", ESqlStatementType.sstpostgresqlSetConstraints); 295 addCmd(TBaseType.rrw_set, "local", "role", ESqlStatementType.sstpostgresqlSetRole); 296 addCmd(TBaseType.rrw_set, "local", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 297 addCmd(TBaseType.rrw_set, "role", ESqlStatementType.sstpostgresqlSetRole); 298 addCmd(TBaseType.rrw_set, "search_path", ESqlStatementType.sstpostgresqlSetSearchPath); 299 addCmd(TBaseType.rrw_set, "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 300 addCmd(TBaseType.rrw_set, "session", "characteristics", "as", "transaction", ESqlStatementType.sstpostgresqlSetTransaction); 301 addCmd(TBaseType.rrw_set, "session", "role", ESqlStatementType.sstpostgresqlSetRole); 302 addCmd(TBaseType.rrw_set, "session", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 303 addCmd(TBaseType.rrw_set, "transaction", ESqlStatementType.sstpostgresqlSetTransaction); 304 305 // SHOW 306 addCmd(TBaseType.rrw_show, ESqlStatementType.sstpostgresqlShow); 307 addCmd(TBaseType.rrw_show, "search_path", ESqlStatementType.sstpostgresqlShowSearchPath); 308 309 // START, TABLE, TRUNCATE 310 addCmd(TBaseType.rrw_start, "transaction", ESqlStatementType.sstStartTransaction); 311 addCmd(TBaseType.rrw_table, ESqlStatementType.sstPostgresqlTable); 312 addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstpostgresqlTruncate); 313 314 // UNLISTEN, UPDATE 315 addCmd(TBaseType.rrw_postgresql_unlisten, ESqlStatementType.sstpostgresqlUnlisten); 316 addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate); 317 318 // VACUUM, VALUES 319 addCmd(TBaseType.rrw_postgresql_vacuum, ESqlStatementType.sstVacuum); 320 addCmd(TBaseType.rrw_values, ESqlStatementType.sstValues); 321 } 322 323 324 @Override 325 public TCustomSqlStatement issql(TSourceToken token, EFindSqlStateType state, TCustomSqlStatement currentStatement) { 326 TCustomSqlStatement ret = null; 327 328 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 329 330 // Skip comments, whitespace, and semicolons 331 if ((token.tokencode == TBaseType.cmtdoublehyphen) 332 || (token.tokencode == TBaseType.cmtslashstar) 333 || (token.tokencode == TBaseType.lexspace) 334 || (token.tokencode == TBaseType.lexnewline) 335 || (token.tokentype == ETokenType.ttsemicolon)) { 336 return null; 337 } 338 339 int lcpos = token.posinlist; 340 TSourceTokenList lcsourcetokenlist = token.container; 341 TCustomSqlStatement lccurrentsqlstatement = currentStatement; 342 343 // Subquery after semicolon or at first line 344 if ((state == EFindSqlStateType.stnormal) && (token.tokentype == ETokenType.ttleftparenthesis)) { // ( 345 int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "("); 346 if (k > 0) { 347 ret = new TSelectSqlStatement(vendor); 348 } 349 return ret; 350 } 351 352 // CTE detection 353 if ((state == EFindSqlStateType.stnormal) && (token.tokencode == TBaseType.rrw_with)) { 354 ret = findcte(token); 355 if (ret != null) return ret; 356 } 357 358 gnewsqlstatementtype = getStatementTypeForToken(token); 359 360 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 361 362 switch (gnewsqlstatementtype) { 363 case sstinvalid: { 364 ret = null; 365 366 if (state == EFindSqlStateType.stnormal) { 367 if (token.tokencode == TBaseType.label_begin) { 368 ret = new TCommonBlock(vendor); 369 gnewsqlstatementtype = ret.sqlstatementtype; 370 } else if (token.tokencode == TBaseType.rrw_declare) { 371 ret = new TCommonBlock(vendor); 372 gnewsqlstatementtype = ret.sqlstatementtype; 373 } else if (token.tokencode == TBaseType.rrw_begin) { 374 ret = new TCommonBlock(vendor); 375 gnewsqlstatementtype = ret.sqlstatementtype; 376 } else if (token.tokencode == TBaseType.rrw_procedure) { 377 ret = new TCreateProcedureStmt(vendor); 378 gnewsqlstatementtype = ret.sqlstatementtype; 379 } else if (token.tokencode == TBaseType.rrw_function) { 380 ret = new TCreateFunctionStmt(vendor); 381 gnewsqlstatementtype = ret.sqlstatementtype; 382 } 383 } 384 break; 385 } 386 387 case sstselect: { 388 boolean lcisnewsql = true; 389 390 if (state != EFindSqlStateType.stnormal) { 391 if (lcprevsolidtoken != null) { 392 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 393 lcisnewsql = false; // subquery 394 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 395 lcisnewsql = false; 396 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 397 lcisnewsql = false; 398 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 399 lcisnewsql = false; 400 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 401 lcisnewsql = false; 402 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 403 lcisnewsql = false; 404 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 405 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 406 lcisnewsql = false; 407 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 408 lcisnewsql = false; 409 } 410 411 if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) { 412 TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 413 if (lcpprevsolidtoken != null) { 414 if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union) 415 lcisnewsql = false; 416 } 417 } 418 } 419 420 if (lccurrentsqlstatement != null) { 421 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert) 422 lcisnewsql = false; 423 } 424 } 425 426 if (lcisnewsql) 427 ret = new TSelectSqlStatement(vendor); 428 429 break; 430 } 431 432 case sstinsert: { 433 boolean lcisnewsql = true; 434 if (state != EFindSqlStateType.stnormal) { 435 if (lccurrentsqlstatement != null) { 436 // Future vendor-specific logic 437 } 438 } 439 440 if (lcisnewsql) 441 ret = new TInsertSqlStatement(vendor); 442 443 break; 444 } 445 446 case sstupdate: { 447 boolean lcisnewsql = true; 448 if (state != EFindSqlStateType.stnormal) { 449 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 450 if (lcprevsolidtoken != null) { 451 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 452 lcisnewsql = false; 453 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 454 lcisnewsql = false; 455 } 456 457 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 458 if (lcnextsolidtoken != null) { 459 if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) { 460 int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "("); 461 if (k == 0) lcisnewsql = false; 462 } 463 } 464 465 if (lccurrentsqlstatement != null) { 466 // Future vendor-specific logic 467 } 468 } 469 470 if (lcisnewsql) { 471 ret = new TUpdateSqlStatement(vendor); 472 ret.dummytag = 1; // means set clause in update is not found yet 473 } 474 break; 475 } 476 477 case sstdelete: { 478 boolean lcisnewsql = true; 479 480 if (state != EFindSqlStateType.stnormal) { 481 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 482 if (lcprevsolidtoken != null) { 483 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 484 lcisnewsql = false; 485 } 486 487 if (lccurrentsqlstatement != null) { 488 // Future vendor-specific logic 489 } 490 } 491 492 if (lcisnewsql) 493 ret = new TDeleteSqlStatement(vendor); 494 495 break; 496 } 497 498 case sstmerge: 499 ret = new TMergeSqlStatement(vendor); 500 ret.sqlstatementtype = gnewsqlstatementtype; 501 break; 502 503 case sstoraclecommit: 504 case sstoraclerollback: 505 case sstoraclesavepoint: 506 case sstoraclerevoke: 507 case sstoraclegrant: 508 case sstoracleanalyze: 509 case sstoracletruncate: 510 ret = new TUnknownSqlStatement(vendor); 511 ret.sqlstatementtype = gnewsqlstatementtype; 512 break; 513 514 case sstcreatetable: 515 ret = new TCreateTableSqlStatement(vendor); 516 break; 517 518 case sstoraclecreateview: 519 ret = new TCreateViewSqlStatement(vendor); 520 break; 521 522 case sstcreatematerializedview: 523 ret = new TCreateMaterializedSqlStatement(vendor); 524 break; 525 526 case sstoraclecreateindex: 527 ret = new TCreateIndexSqlStatement(vendor); 528 break; 529 530 case sstoraclecreatedatabase: 531 ret = new TCreateDatabaseSqlStatement(vendor); 532 break; 533 534 case sstoracledroptable: 535 ret = new TDropTableSqlStatement(vendor); 536 break; 537 538 case sstoracledropview: 539 ret = new TDropViewSqlStatement(vendor); 540 break; 541 542 case sstoracledropindex: 543 ret = new TDropIndexSqlStatement(vendor); 544 break; 545 546 case sstaltertable: 547 ret = new TAlterTableStatement(vendor); 548 break; 549 550 case sstoraclealtersession: 551 ret = new TAlterSessionStatement(vendor); 552 break; 553 554 case sstCommentOn: 555 ret = new TCommentOnSqlStmt(vendor); 556 break; 557 558 case sstoraclecreatesequence: 559 ret = new TCreateSequenceStmt(vendor); 560 break; 561 562 // PostgreSQL-specific statement types 563 case sstpostgresqlCreateIndex: 564 ret = new TCreateIndexSqlStatement(vendor); 565 break; 566 567 case sstpostgresqlCreateView: 568 ret = new TCreateViewSqlStatement(vendor); 569 break; 570 571 case sstpostgresqlCreateFunction: 572 ret = new TCreateFunctionStmt(vendor); 573 break; 574 575 case sstcreatetrigger: 576 ret = new TCreateTriggerStmt(vendor); 577 break; 578 579 case sstpostgresqlMove: 580 ret = new TMoveStmt(vendor); 581 break; 582 583 case sstpostgresqlTruncate: 584 ret = new TTruncateStatement(vendor); 585 break; 586 587 case sstpostgresqlExecute: 588 ret = new TExecuteSqlStatement(vendor); 589 break; 590 591 case sstpostgresqlDropTable: 592 ret = new TDropTableSqlStatement(vendor); 593 break; 594 595 case sstPostgresqlBlock: 596 ret = new TCommonBlock(vendor); 597 break; 598 599 case sstVacuum: 600 ret = new TVacuumStmt(vendor); 601 break; 602 603 case sstReindex: 604 ret = new TReindexStmt(vendor); 605 break; 606 607 case sstcreateprocedure: 608 ret = new TCreateProcedureStmt(vendor); 609 break; 610 611 case sstpostgresqlCommit: 612 ret = new TCommitStmt(vendor); 613 break; 614 615 case sstpostgresqlCreateSchema: 616 ret = new TCreateSchemaSqlStatement(vendor); 617 break; 618 619 case sstpostgresqlDropSchema: 620 ret = new TDropSchemaSqlStatement(vendor); 621 break; 622 623 case sstpostgresqlShowSearchPath: 624 ret = new TShowSearchPathStmt(vendor); 625 break; 626 627 case sstpostgresqlCopy: 628 ret = new TCopyStmt(vendor); 629 break; 630 631 case sstcall: 632 ret = new TCallStatement(vendor); 633 break; 634 635 case sstpostgresqlAlterSchema: 636 ret = new TAlterSchemaStmt(vendor); 637 break; 638 639 case sstpostgresqlAlterfunction: 640 ret = new TAlterFunctionStmt(vendor); 641 break; 642 643 case sstStartTransaction: 644 ret = new TStartTransactionStmt(vendor); 645 break; 646 647 case sstpostgresqlComment: 648 ret = new TCommentOnSqlStmt(vendor); 649 break; 650 651 case sstpostgresqlShow: 652 ret = new TShowStmt(vendor); 653 break; 654 655 case sstpostgresqlSetSearchPath: 656 case sstpostgresqlSet: 657 ret = new TSetStmt(vendor); 658 break; 659 660 case sstpostgresqlDropFunction: 661 ret = new TDropFunctionStmt(vendor); 662 break; 663 664 case sstpostgresqlDropTrigger: 665 ret = new TDropTriggerSqlStatement(vendor); 666 break; 667 668 case sstpostgresqlDropProcedure: 669 ret = new TDropProcedureStmt(vendor); 670 break; 671 672 case sstdropindex: 673 ret = new TDropIndexSqlStatement(vendor); 674 break; 675 676 case sstpostgresqlDropSequence: 677 ret = new TDropSequenceStmt(vendor); 678 break; 679 680 case sstpostgresqlDropView: 681 ret = new TDropViewSqlStatement(vendor); 682 break; 683 684 case sstpostgresqlCreateSequence: 685 ret = new TCreateSequenceStmt(vendor); 686 break; 687 688 case sstpostgresqlCreateType: 689 ret = new TCreateTypeStmt(vendor); 690 break; 691 692 case sstcreateExtension: 693 ret = new TCreateExtensionStmt(vendor); 694 break; 695 696 case sstPostgresqlTable: 697 ret = new TPostgresqlTableStmt(vendor); 698 break; 699 700 case sstpostgresqlDropMaterializedView: 701 ret = new TDropMaterializedViewStmt(vendor); 702 break; 703 704 case sstpostgresqlDo: { 705 boolean lcisnewsql = false; 706 707 if (state == EFindSqlStateType.stnormal) { 708 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 709 if (lcnextsolidtoken != null) { 710 if (lcnextsolidtoken.tokencode == TBaseType.rrw_postgresql_function_delimiter) 711 lcisnewsql = true; 712 } 713 } 714 715 if (lcisnewsql) 716 ret = new TDoExecuteBlockStmt(vendor); 717 718 break; 719 } 720 721 case sstpostgresqlDeclare: 722 ret = new TCommonBlock(vendor); 723 gnewsqlstatementtype = ret.sqlstatementtype; 724 break; 725 726 case sstpostgresqlExplain: 727 ret = new TExplainPlan(vendor); 728 gnewsqlstatementtype = ret.sqlstatementtype; 729 break; 730 731 case sstpostgresqlCreateRole: 732 ret = new TCreateRoleStmt(vendor); 733 break; 734 735 case sstpostgresqlAlterRole: 736 ret = new TAlterRoleStmt(vendor); 737 break; 738 739 case sstpostgresqlAlterIndex: 740 ret = new TAlterIndexStmt(vendor); 741 break; 742 743 default: 744 ret = new TUnknownSqlStatement(vendor); 745 ret.sqlstatementtype = gnewsqlstatementtype; 746 break; 747 } 748 749 return ret; 750 } 751 752}