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", "recursive", "view", ESqlStatementType.sstpostgresqlCreateView); 132 addCmd(TBaseType.rrw_create, "or", "replace", "role ", ESqlStatementType.sstpostgresqlCreateRole); 133 addCmd(TBaseType.rrw_create, "or", "replace", "rule ", ESqlStatementType.sstpostgresqlCreateRule); 134 addCmd(TBaseType.rrw_create, "or", "replace", "temp", "recursive", "view", ESqlStatementType.sstpostgresqlCreateView); 135 addCmd(TBaseType.rrw_create, "or", "replace", "temp", "view", ESqlStatementType.sstpostgresqlCreateView); 136 addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "recursive", "view", ESqlStatementType.sstpostgresqlCreateView); 137 addCmd(TBaseType.rrw_create, "or", "replace", "temporary", "view", ESqlStatementType.sstpostgresqlCreateView); 138 addCmd(TBaseType.rrw_create, "or", "replace", "trigger", ESqlStatementType.sstcreatetrigger); 139 addCmd(TBaseType.rrw_create, "or", "replace", "trusted", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 140 addCmd(TBaseType.rrw_create, "or", "replace", "trusted", "procedural", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 141 addCmd(TBaseType.rrw_create, "or", "replace", "view", ESqlStatementType.sstpostgresqlCreateView); 142 addCmd(TBaseType.rrw_create, "policy", ESqlStatementType.sstpostgresqlCreatePolicy); 143 addCmd(TBaseType.rrw_create, "procedural", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 144 addCmd(TBaseType.rrw_create, "procedure", ESqlStatementType.sstcreateprocedure); 145 addCmd(TBaseType.rrw_create, "publication", ESqlStatementType.sstpostgresqlCreatePublication); 146 addCmd(TBaseType.rrw_create, "recursive", "view", ESqlStatementType.sstpostgresqlCreateView); 147 addCmd(TBaseType.rrw_create, "role", ESqlStatementType.sstpostgresqlCreateRole); 148 addCmd(TBaseType.rrw_create, "rule", ESqlStatementType.sstpostgresqlCreateRule); 149 addCmd(TBaseType.rrw_create, "schema", ESqlStatementType.sstpostgresqlCreateSchema); 150 addCmd(TBaseType.rrw_create, "sequence", ESqlStatementType.sstpostgresqlCreateSequence); 151 addCmd(TBaseType.rrw_create, "server", ESqlStatementType.sstpostgresqlCreateServer); 152 addCmd(TBaseType.rrw_create, "statistics", ESqlStatementType.sstpostgresqlCreateStatistics); 153 addCmd(TBaseType.rrw_create, "subscription", ESqlStatementType.sstpostgresqlCreateSubscription); 154 addCmd(TBaseType.rrw_create, "table", ESqlStatementType.sstcreatetable); 155 addCmd(TBaseType.rrw_create, "tablespace", ESqlStatementType.sstpostgresqlCreateTablespace); 156 addCmd(TBaseType.rrw_create, "temp", "recursive", "view", ESqlStatementType.sstpostgresqlCreateView); 157 addCmd(TBaseType.rrw_create, "temp", "sequence", ESqlStatementType.sstpostgresqlCreateSequence); 158 addCmd(TBaseType.rrw_create, "temp", "table", ESqlStatementType.sstcreatetable); 159 addCmd(TBaseType.rrw_create, "temp", "view", ESqlStatementType.sstpostgresqlCreateView); 160 addCmd(TBaseType.rrw_create, "temporary", "recursive", "view", ESqlStatementType.sstpostgresqlCreateView); 161 addCmd(TBaseType.rrw_create, "temporary", "sequence", ESqlStatementType.sstpostgresqlCreateSequence); 162 addCmd(TBaseType.rrw_create, "temporary", "table", ESqlStatementType.sstcreatetable); 163 addCmd(TBaseType.rrw_create, "temporary", "view", ESqlStatementType.sstpostgresqlCreateView); 164 addCmd(TBaseType.rrw_create, "text", "search", "configuration", ESqlStatementType.sstpostgresqlCreateTextSearchConfiguration); 165 addCmd(TBaseType.rrw_create, "text", "search", "dictionary", ESqlStatementType.sstpostgresqlCreateTextSearchDictionary); 166 addCmd(TBaseType.rrw_create, "text", "search", "parser", ESqlStatementType.sstpostgresqlCreateTextSearchParser); 167 addCmd(TBaseType.rrw_create, "text", "search", "template", ESqlStatementType.sstpostgresqlCreateTextSearchTemplate); 168 addCmd(TBaseType.rrw_create, "transform", ESqlStatementType.sstpostgresqlCreateTransform); 169 addCmd(TBaseType.rrw_create, "trigger", ESqlStatementType.sstcreatetrigger); 170 addCmd(TBaseType.rrw_create, "trusted", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 171 addCmd(TBaseType.rrw_create, "trusted", "procedural", "language", ESqlStatementType.sstpostgresqlCreateLanguage); 172 addCmd(TBaseType.rrw_create, "type", ESqlStatementType.sstpostgresqlCreateType); 173 addCmd(TBaseType.rrw_create, "unique", "index", ESqlStatementType.sstpostgresqlCreateIndex); 174 addCmd(TBaseType.rrw_create, "unlocked", "table", ESqlStatementType.sstcreatetable); 175 addCmd(TBaseType.rrw_create, "unlogged", "sequence", ESqlStatementType.sstpostgresqlCreateSequence); 176 addCmd(TBaseType.rrw_create, "unlogged", "table", ESqlStatementType.sstcreatetable); 177 addCmd(TBaseType.rrw_create, "user", ESqlStatementType.sstpostgresqlCreateUser); 178 addCmd(TBaseType.rrw_create, "user", "mapping", ESqlStatementType.sstpostgresqlCreateUserMapping); 179 addCmd(TBaseType.rrw_create, "view", ESqlStatementType.sstpostgresqlCreateView); 180 181 // DEALLOCATE, DECLARE, DELETE 182 addCmd(TBaseType.rrw_deallocate, ESqlStatementType.sstpostgresqlDeallocate); 183 addCmd(TBaseType.rrw_declare, ESqlStatementType.sstpostgresqlDeclare); 184 addCmd(TBaseType.rrw_delete, ESqlStatementType.sstdelete); 185 186 // DISCARD, DO 187 addCmd(TBaseType.rrw_postgresql_discard, ESqlStatementType.sstpostgresqlDiscard); 188 addCmd(TBaseType.rrw_do, ESqlStatementType.sstpostgresqlDo); 189 190 // DROP commands 191 addCmd(TBaseType.rrw_drop, "access", "method", ESqlStatementType.sstpostgresqlDropAccessMethod); 192 addCmd(TBaseType.rrw_drop, "aggregate", ESqlStatementType.sstpostgresqlDropAggregate); 193 addCmd(TBaseType.rrw_drop, "assertion", ESqlStatementType.sstpostgresqlDropAssertion); 194 addCmd(TBaseType.rrw_drop, "cast", ESqlStatementType.sstpostgresqlDropCast); 195 addCmd(TBaseType.rrw_drop, "collation", ESqlStatementType.sstpostgresqlDropCollation); 196 addCmd(TBaseType.rrw_drop, "conversion", ESqlStatementType.sstpostgresqlDropConversion); 197 addCmd(TBaseType.rrw_drop, "database", ESqlStatementType.sstpostgresqlDropDatabase); 198 addCmd(TBaseType.rrw_drop, "domain", ESqlStatementType.sstpostgresqlDropDomain); 199 addCmd(TBaseType.rrw_drop, "event", "trigger", ESqlStatementType.sstpostgresqlDropEventTrigger); 200 addCmd(TBaseType.rrw_drop, "extension", ESqlStatementType.sstpostgresqlDropExtension); 201 addCmd(TBaseType.rrw_drop, "external", "table", ESqlStatementType.sstpostgresqlDropTable); 202 addCmd(TBaseType.rrw_drop, "foreign", "data", "wrapper", ESqlStatementType.sstpostgresqlDropForeignDataWrapper); 203 addCmd(TBaseType.rrw_drop, "foreign", "table", ESqlStatementType.sstpostgresqlDropForeignTable); 204 addCmd(TBaseType.rrw_drop, "function", ESqlStatementType.sstpostgresqlDropFunction); 205 addCmd(TBaseType.rrw_drop, "group", ESqlStatementType.sstpostgresqlDropGroup); 206 addCmd(TBaseType.rrw_drop, "index", ESqlStatementType.sstdropindex); 207 addCmd(TBaseType.rrw_drop, "language", ESqlStatementType.sstpostgresqlDropLanguage); 208 addCmd(TBaseType.rrw_drop, "materialized", "view", ESqlStatementType.sstpostgresqlDropMaterializedView); 209 addCmd(TBaseType.rrw_drop, "operator", ESqlStatementType.sstpostgresqlDropOperator); 210 addCmd(TBaseType.rrw_drop, "operator", "class", ESqlStatementType.sstpostgresqlDropOperatorClass); 211 addCmd(TBaseType.rrw_drop, "operator", "family ", ESqlStatementType.sstpostgresqlDropOperatorFamily); 212 addCmd(TBaseType.rrw_drop, "owned", ESqlStatementType.sstpostgresqlDropOwned); 213 addCmd(TBaseType.rrw_drop, "policy", ESqlStatementType.sstpostgresqlDropPolicy); 214 addCmd(TBaseType.rrw_drop, "procedural", "language", ESqlStatementType.sstpostgresqlDropLanguage); 215 addCmd(TBaseType.rrw_drop, "procedure", ESqlStatementType.sstpostgresqlDropProcedure); 216 addCmd(TBaseType.rrw_drop, "publication", ESqlStatementType.sstpostgresqlDropPublication); 217 addCmd(TBaseType.rrw_drop, "role", ESqlStatementType.sstpostgresqlDropRole); 218 addCmd(TBaseType.rrw_drop, "routine", ESqlStatementType.sstpostgresqlDropRoutine); 219 addCmd(TBaseType.rrw_drop, "rule", ESqlStatementType.sstpostgresqlDropRule); 220 addCmd(TBaseType.rrw_drop, "schema", ESqlStatementType.sstpostgresqlDropSchema); 221 addCmd(TBaseType.rrw_drop, "sequence", ESqlStatementType.sstpostgresqlDropSequence); 222 addCmd(TBaseType.rrw_drop, "server", ESqlStatementType.sstpostgresqlDropServer); 223 addCmd(TBaseType.rrw_drop, "statistics", ESqlStatementType.sstpostgresqlDropStatistics); 224 addCmd(TBaseType.rrw_drop, "subscription", ESqlStatementType.sstpostgresqlDropSubscription); 225 addCmd(TBaseType.rrw_drop, "table", ESqlStatementType.sstpostgresqlDropTable); 226 addCmd(TBaseType.rrw_drop, "tablespace", ESqlStatementType.sstpostgresqlDropTablespace); 227 addCmd(TBaseType.rrw_drop, "text", "search", "configuration", ESqlStatementType.sstpostgresqlDropTextSearchConfiguration); 228 addCmd(TBaseType.rrw_drop, "text", "search", "dictionary", ESqlStatementType.sstpostgresqlDropTextSearchDictionary); 229 addCmd(TBaseType.rrw_drop, "text", "search", "parser", ESqlStatementType.sstpostgresqlDropTextSearchParser); 230 addCmd(TBaseType.rrw_drop, "text", "search", "template", ESqlStatementType.sstpostgresqlDropTextSearchTemplate); 231 addCmd(TBaseType.rrw_drop, "transform", ESqlStatementType.sstpostgresqlDropTransform); 232 addCmd(TBaseType.rrw_drop, "trigger", ESqlStatementType.sstpostgresqlDropTrigger); 233 addCmd(TBaseType.rrw_drop, "type", ESqlStatementType.sstpostgresqlDropType); 234 addCmd(TBaseType.rrw_drop, "user", ESqlStatementType.sstpostgresqlDropUser); 235 addCmd(TBaseType.rrw_drop, "user", "mapping", ESqlStatementType.sstpostgresqlDropUserMapping); 236 addCmd(TBaseType.rrw_drop, "view", ESqlStatementType.sstpostgresqlDropView); 237 238 // END, EXECUTE, EXPLAIN 239 addCmd(TBaseType.rrw_end, ESqlStatementType.sstpostgresqlEnd); 240 addCmd(TBaseType.rrw_execute, ESqlStatementType.sstpostgresqlExecute); 241 addCmd(TBaseType.rrw_explain, ESqlStatementType.sstpostgresqlExplain); 242 243 // FETCH, GRANT 244 addCmd(TBaseType.rrw_fetch, ESqlStatementType.sstFetchFrom); 245 addCmd(TBaseType.rrw_grant, ESqlStatementType.sstpostgresqlGrant); 246 247 // IMPORT 248 addCmd(TBaseType.rrw_postgresql_import, "foreign", "schema", ESqlStatementType.sstPostgresqlImport); 249 250 // INSERT 251 addCmd(TBaseType.rrw_insert, ESqlStatementType.sstinsert); 252 253 // LISTEN, LOAD, LOCK 254 addCmd(TBaseType.rrw_postgresql_listen, ESqlStatementType.sstpostgresqlListen); 255 addCmd(TBaseType.rrw_load, ESqlStatementType.sstpostgresqlLoad); 256 addCmd(TBaseType.rrw_lock, ESqlStatementType.sstpostgresqlLock); 257 258 // MERGE, MOVE 259 addCmd(TBaseType.rrw_merge, ESqlStatementType.sstmerge); 260 addCmd(TBaseType.rrw_move, ESqlStatementType.sstpostgresqlMove); 261 262 // NOTIFY 263 addCmd(TBaseType.rrw_postgresql_notify, ESqlStatementType.sstpostgresqlNotify); 264 265 // PL/pgSQL block 266 addCmd(TBaseType.rrw_plpgsql_function_delimiter, ESqlStatementType.sstPostgresqlBlock); 267 268 // PREPARE 269 addCmd(TBaseType.rrw_prepare, ESqlStatementType.sstpostgresqlPrepare); 270 addCmd(TBaseType.rrw_prepare, "transaction", ESqlStatementType.sstpostgresqlPrepareTransaction); 271 272 // REASSIGN, REFRESH, REINDEX 273 addCmd(TBaseType.rrw_postgresql_reassign, "owned", ESqlStatementType.sstpostgresqlReassignOwned); 274 addCmd(TBaseType.rrw_refresh, "materialized", "view", ESqlStatementType.sstpostgresqlRefreshMaterializedView); 275 addCmd(TBaseType.rrw_postgresql_reindex, ESqlStatementType.sstReindex); 276 277 // RELEASE, RESET, REVOKE 278 addCmd(TBaseType.rrw_release, ESqlStatementType.sstpostgresqlReleaseSavepoint); 279 addCmd(TBaseType.rrw_release, "savepoint", ESqlStatementType.sstpostgresqlReleaseSavepoint); 280 addCmd(TBaseType.rrw_reset, ESqlStatementType.sstpostgresqlReset); 281 addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstpostgresqlRevoke); 282 283 // ROLLBACK 284 addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstpostgresqlRollback); 285 addCmd(TBaseType.rrw_rollback, "prepared", ESqlStatementType.sstpostgresqlRollbackPrepared); 286 addCmd(TBaseType.rrw_rollback, "to", "savepoint", ESqlStatementType.sstpostgresqlRollbackToSavepoint); 287 288 // SAVEPOINT 289 addCmd(TBaseType.rrw_savepoint, ESqlStatementType.sstpostgresqlSavepoint); 290 291 // SECURITY LABEL 292 addCmd(TBaseType.rrw_postgresql_security, "label", ESqlStatementType.sstpostgresqlSecurityLabel); 293 294 // SELECT 295 addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect); 296 297 // SET commands 298 addCmd(TBaseType.rrw_set, ESqlStatementType.sstpostgresqlSet); 299 addCmd(TBaseType.rrw_set, "constraints", ESqlStatementType.sstpostgresqlSetConstraints); 300 addCmd(TBaseType.rrw_set, "local", "role", ESqlStatementType.sstpostgresqlSetRole); 301 addCmd(TBaseType.rrw_set, "local", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 302 addCmd(TBaseType.rrw_set, "role", ESqlStatementType.sstpostgresqlSetRole); 303 addCmd(TBaseType.rrw_set, "search_path", ESqlStatementType.sstpostgresqlSetSearchPath); 304 addCmd(TBaseType.rrw_set, "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 305 addCmd(TBaseType.rrw_set, "session", "characteristics", "as", "transaction", ESqlStatementType.sstpostgresqlSetTransaction); 306 addCmd(TBaseType.rrw_set, "session", "role", ESqlStatementType.sstpostgresqlSetRole); 307 addCmd(TBaseType.rrw_set, "session", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 308 addCmd(TBaseType.rrw_set, "transaction", ESqlStatementType.sstpostgresqlSetTransaction); 309 310 // SHOW 311 addCmd(TBaseType.rrw_show, ESqlStatementType.sstpostgresqlShow); 312 addCmd(TBaseType.rrw_show, "search_path", ESqlStatementType.sstpostgresqlShowSearchPath); 313 314 // START, TABLE, TRUNCATE 315 addCmd(TBaseType.rrw_start, "transaction", ESqlStatementType.sstStartTransaction); 316 addCmd(TBaseType.rrw_table, ESqlStatementType.sstPostgresqlTable); 317 addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstpostgresqlTruncate); 318 319 // UNLISTEN, UPDATE 320 addCmd(TBaseType.rrw_postgresql_unlisten, ESqlStatementType.sstpostgresqlUnlisten); 321 addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate); 322 323 // VACUUM, VALUES 324 addCmd(TBaseType.rrw_postgresql_vacuum, ESqlStatementType.sstVacuum); 325 addCmd(TBaseType.rrw_values, ESqlStatementType.sstValues); 326 } 327 328 329 @Override 330 public TCustomSqlStatement issql(TSourceToken token, EFindSqlStateType state, TCustomSqlStatement currentStatement) { 331 TCustomSqlStatement ret = null; 332 333 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 334 335 // Skip comments, whitespace, and semicolons 336 if ((token.tokencode == TBaseType.cmtdoublehyphen) 337 || (token.tokencode == TBaseType.cmtslashstar) 338 || (token.tokencode == TBaseType.lexspace) 339 || (token.tokencode == TBaseType.lexnewline) 340 || (token.tokentype == ETokenType.ttsemicolon)) { 341 return null; 342 } 343 344 int lcpos = token.posinlist; 345 TSourceTokenList lcsourcetokenlist = token.container; 346 TCustomSqlStatement lccurrentsqlstatement = currentStatement; 347 348 // Subquery after semicolon or at first line 349 if ((state == EFindSqlStateType.stnormal) && (token.tokentype == ETokenType.ttleftparenthesis)) { // ( 350 int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "("); 351 if (k > 0) { 352 ret = new TSelectSqlStatement(vendor); 353 } 354 return ret; 355 } 356 357 // CTE detection 358 if ((state == EFindSqlStateType.stnormal) && (token.tokencode == TBaseType.rrw_with)) { 359 ret = findcte(token); 360 if (ret != null) return ret; 361 } 362 363 gnewsqlstatementtype = getStatementTypeForToken(token); 364 365 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 366 367 switch (gnewsqlstatementtype) { 368 case sstinvalid: { 369 ret = null; 370 371 if (state == EFindSqlStateType.stnormal) { 372 if (token.tokencode == TBaseType.label_begin) { 373 ret = new TCommonBlock(vendor); 374 gnewsqlstatementtype = ret.sqlstatementtype; 375 } else if (token.tokencode == TBaseType.rrw_declare) { 376 ret = new TCommonBlock(vendor); 377 gnewsqlstatementtype = ret.sqlstatementtype; 378 } else if (token.tokencode == TBaseType.rrw_begin) { 379 ret = new TCommonBlock(vendor); 380 gnewsqlstatementtype = ret.sqlstatementtype; 381 } else if (token.tokencode == TBaseType.rrw_procedure) { 382 ret = new TCreateProcedureStmt(vendor); 383 gnewsqlstatementtype = ret.sqlstatementtype; 384 } else if (token.tokencode == TBaseType.rrw_function) { 385 ret = new TCreateFunctionStmt(vendor); 386 gnewsqlstatementtype = ret.sqlstatementtype; 387 } 388 } 389 break; 390 } 391 392 case sstselect: { 393 boolean lcisnewsql = true; 394 395 if (state != EFindSqlStateType.stnormal) { 396 if (lcprevsolidtoken != null) { 397 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 398 lcisnewsql = false; // subquery 399 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 400 lcisnewsql = false; 401 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 402 lcisnewsql = false; 403 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 404 lcisnewsql = false; 405 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 406 lcisnewsql = false; 407 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 408 lcisnewsql = false; 409 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 410 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 411 lcisnewsql = false; 412 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 413 lcisnewsql = false; 414 } 415 416 if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) { 417 TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 418 if (lcpprevsolidtoken != null) { 419 if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union) 420 lcisnewsql = false; 421 } 422 } 423 } 424 425 if (lccurrentsqlstatement != null) { 426 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert) 427 lcisnewsql = false; 428 } 429 } 430 431 if (lcisnewsql) 432 ret = new TSelectSqlStatement(vendor); 433 434 break; 435 } 436 437 case sstinsert: { 438 boolean lcisnewsql = true; 439 if (state != EFindSqlStateType.stnormal) { 440 if (lccurrentsqlstatement != null) { 441 // Future vendor-specific logic 442 } 443 } 444 445 if (lcisnewsql) 446 ret = new TInsertSqlStatement(vendor); 447 448 break; 449 } 450 451 case sstupdate: { 452 boolean lcisnewsql = true; 453 if (state != EFindSqlStateType.stnormal) { 454 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 455 if (lcprevsolidtoken != null) { 456 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 457 lcisnewsql = false; 458 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 459 lcisnewsql = false; 460 } 461 462 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 463 if (lcnextsolidtoken != null) { 464 if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) { 465 int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "("); 466 if (k == 0) lcisnewsql = false; 467 } 468 } 469 470 if (lccurrentsqlstatement != null) { 471 // Future vendor-specific logic 472 } 473 } 474 475 if (lcisnewsql) { 476 ret = new TUpdateSqlStatement(vendor); 477 ret.dummytag = 1; // means set clause in update is not found yet 478 } 479 break; 480 } 481 482 case sstdelete: { 483 boolean lcisnewsql = true; 484 485 if (state != EFindSqlStateType.stnormal) { 486 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 487 if (lcprevsolidtoken != null) { 488 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 489 lcisnewsql = false; 490 } 491 492 if (lccurrentsqlstatement != null) { 493 // Future vendor-specific logic 494 } 495 } 496 497 if (lcisnewsql) 498 ret = new TDeleteSqlStatement(vendor); 499 500 break; 501 } 502 503 case sstmerge: 504 ret = new TMergeSqlStatement(vendor); 505 ret.sqlstatementtype = gnewsqlstatementtype; 506 break; 507 508 case sstoraclecommit: 509 case sstoraclerollback: 510 case sstoraclesavepoint: 511 case sstoraclerevoke: 512 case sstoraclegrant: 513 case sstoracleanalyze: 514 case sstoracletruncate: 515 ret = new TUnknownSqlStatement(vendor); 516 ret.sqlstatementtype = gnewsqlstatementtype; 517 break; 518 519 case sstcreatetable: 520 ret = new TCreateTableSqlStatement(vendor); 521 break; 522 523 case sstoraclecreateview: 524 ret = new TCreateViewSqlStatement(vendor); 525 break; 526 527 case sstcreatematerializedview: 528 ret = new TCreateMaterializedSqlStatement(vendor); 529 break; 530 531 case sstoraclecreateindex: 532 ret = new TCreateIndexSqlStatement(vendor); 533 break; 534 535 case sstoraclecreatedatabase: 536 ret = new TCreateDatabaseSqlStatement(vendor); 537 break; 538 539 case sstoracledroptable: 540 ret = new TDropTableSqlStatement(vendor); 541 break; 542 543 case sstoracledropview: 544 ret = new TDropViewSqlStatement(vendor); 545 break; 546 547 case sstoracledropindex: 548 ret = new TDropIndexSqlStatement(vendor); 549 break; 550 551 case sstaltertable: 552 ret = new TAlterTableStatement(vendor); 553 break; 554 555 case sstoraclealtersession: 556 ret = new TAlterSessionStatement(vendor); 557 break; 558 559 case sstCommentOn: 560 ret = new TCommentOnSqlStmt(vendor); 561 break; 562 563 case sstoraclecreatesequence: 564 ret = new TCreateSequenceStmt(vendor); 565 break; 566 567 // PostgreSQL-specific statement types 568 case sstpostgresqlCreateIndex: 569 ret = new TCreateIndexSqlStatement(vendor); 570 break; 571 572 case sstpostgresqlCreateView: 573 ret = new TCreateViewSqlStatement(vendor); 574 break; 575 576 case sstpostgresqlCreateFunction: 577 ret = new TCreateFunctionStmt(vendor); 578 break; 579 580 case sstcreatetrigger: 581 ret = new TCreateTriggerStmt(vendor); 582 break; 583 584 case sstpostgresqlMove: 585 ret = new TMoveStmt(vendor); 586 break; 587 588 case sstpostgresqlTruncate: 589 ret = new TTruncateStatement(vendor); 590 break; 591 592 case sstpostgresqlExecute: 593 ret = new TExecuteSqlStatement(vendor); 594 break; 595 596 case sstpostgresqlDropTable: 597 ret = new TDropTableSqlStatement(vendor); 598 break; 599 600 case sstPostgresqlBlock: 601 ret = new TCommonBlock(vendor); 602 break; 603 604 case sstVacuum: 605 ret = new TVacuumStmt(vendor); 606 break; 607 608 case sstReindex: 609 ret = new TReindexStmt(vendor); 610 break; 611 612 case sstcreateprocedure: 613 ret = new TCreateProcedureStmt(vendor); 614 break; 615 616 case sstpostgresqlCommit: 617 ret = new TCommitStmt(vendor); 618 break; 619 620 case sstpostgresqlCreateSchema: 621 ret = new TCreateSchemaSqlStatement(vendor); 622 break; 623 624 case sstpostgresqlDropSchema: 625 ret = new TDropSchemaSqlStatement(vendor); 626 break; 627 628 case sstpostgresqlShowSearchPath: 629 ret = new TShowSearchPathStmt(vendor); 630 break; 631 632 case sstpostgresqlCopy: 633 ret = new TCopyStmt(vendor); 634 break; 635 636 case sstcall: 637 ret = new TCallStatement(vendor); 638 break; 639 640 case sstpostgresqlAlterSchema: 641 ret = new TAlterSchemaStmt(vendor); 642 break; 643 644 case sstpostgresqlAlterfunction: 645 ret = new TAlterFunctionStmt(vendor); 646 break; 647 648 case sstStartTransaction: 649 ret = new TStartTransactionStmt(vendor); 650 break; 651 652 case sstpostgresqlComment: 653 ret = new TCommentOnSqlStmt(vendor); 654 break; 655 656 case sstpostgresqlShow: 657 ret = new TShowStmt(vendor); 658 break; 659 660 case sstpostgresqlSetSearchPath: 661 case sstpostgresqlSet: 662 if (state == EFindSqlStateType.stnormal) { 663 ret = new TSetStmt(vendor); 664 } 665 break; 666 667 case sstpostgresqlDropFunction: 668 ret = new TDropFunctionStmt(vendor); 669 break; 670 671 case sstpostgresqlDropTrigger: 672 ret = new TDropTriggerSqlStatement(vendor); 673 break; 674 675 case sstpostgresqlDropProcedure: 676 ret = new TDropProcedureStmt(vendor); 677 break; 678 679 case sstdropindex: 680 ret = new TDropIndexSqlStatement(vendor); 681 break; 682 683 case sstpostgresqlDropSequence: 684 ret = new TDropSequenceStmt(vendor); 685 break; 686 687 case sstpostgresqlDropView: 688 ret = new TDropViewSqlStatement(vendor); 689 break; 690 691 case sstpostgresqlCreateSequence: 692 ret = new TCreateSequenceStmt(vendor); 693 break; 694 695 case sstpostgresqlAlterSequence: 696 ret = new TAlterSequenceStatement(vendor); 697 break; 698 699 case sstpostgresqlCreateType: 700 ret = new TCreateTypeStmt(vendor); 701 break; 702 703 case sstcreateExtension: 704 ret = new TCreateExtensionStmt(vendor); 705 break; 706 707 case sstpostgresqlCreateForeignTable: 708 ret = new TCreateTableSqlStatement(vendor); 709 break; 710 711 case sstPostgresqlTable: 712 ret = new TPostgresqlTableStmt(vendor); 713 break; 714 715 case sstpostgresqlDropMaterializedView: 716 ret = new TDropMaterializedViewStmt(vendor); 717 break; 718 719 case sstpostgresqlDo: { 720 boolean lcisnewsql = false; 721 722 if (state == EFindSqlStateType.stnormal) { 723 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 724 if (lcnextsolidtoken != null) { 725 if (lcnextsolidtoken.tokencode == TBaseType.rrw_postgresql_function_delimiter) 726 lcisnewsql = true; 727 else if (lcnextsolidtoken.tokencode == TBaseType.rrw_postgresql_language) { 728 // DO LANGUAGE plpgsql $$ ... $$ 729 lcisnewsql = true; 730 } 731 } 732 } 733 734 if (lcisnewsql) 735 ret = new TDoExecuteBlockStmt(vendor); 736 737 break; 738 } 739 740 case sstpostgresqlDeclare: { 741 // Distinguish between DECLARE CURSOR (standalone SQL statement) and 742 // PL/pgSQL DECLARE block. 743 // DECLARE name [BINARY] [INSENSITIVE|ASENSITIVE] [[NO] SCROLL] CURSOR ... 744 // If DECLARE is followed by an identifier, then one of CURSOR/BINARY/ 745 // INSENSITIVE/ASENSITIVE/NO/SCROLL, it's a cursor declaration. 746 boolean isCursorDecl = false; 747 TSourceToken st = token.nextSolidToken(); 748 if (st != null && st.tokencode == TBaseType.ident) { 749 TSourceToken st2 = st.nextSolidToken(); 750 if (st2 != null) { 751 String s2 = st2.toString().toUpperCase(); 752 if (s2.equals("CURSOR") || s2.equals("BINARY") 753 || s2.equals("INSENSITIVE") || s2.equals("ASENSITIVE") 754 || s2.equals("NO") || s2.equals("SCROLL")) { 755 isCursorDecl = true; 756 } 757 } 758 } 759 if (isCursorDecl) { 760 ret = new TDeclareCursorStmt(vendor); 761 gnewsqlstatementtype = ret.sqlstatementtype; 762 token.tokencode = TBaseType.rrw_postgresql_declare_cursor_stmt; 763 } else { 764 ret = new TCommonBlock(vendor); 765 gnewsqlstatementtype = ret.sqlstatementtype; 766 } 767 break; 768 } 769 770 case sstpostgresqlExplain: 771 ret = new TExplainPlan(vendor); 772 gnewsqlstatementtype = ret.sqlstatementtype; 773 break; 774 775 case sstpostgresqlCreateRole: 776 ret = new TCreateRoleStmt(vendor); 777 break; 778 779 case sstpostgresqlAlterRole: 780 ret = new TAlterRoleStmt(vendor); 781 break; 782 783 case sstpostgresqlAlterIndex: 784 ret = new TAlterIndexStmt(vendor); 785 break; 786 787 case sstpostgresqlGrant: 788 ret = new TGrantSqlStatement(vendor); 789 break; 790 791 case sstpostgresqlRevoke: 792 ret = new TRevokeStmt(vendor); 793 break; 794 795 default: 796 ret = new TUnknownSqlStatement(vendor); 797 ret.sqlstatementtype = gnewsqlstatementtype; 798 break; 799 } 800 801 return ret; 802 } 803 804}