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 // RETURN (PL/pgSQL) 273 addCmd(TBaseType.rrw_return, ESqlStatementType.sst_returnstmt); 274 275 // REASSIGN, REFRESH, REINDEX 276 addCmd(TBaseType.rrw_postgresql_reassign, "owned", ESqlStatementType.sstpostgresqlReassignOwned); 277 addCmd(TBaseType.rrw_refresh, "materialized", "view", ESqlStatementType.sstpostgresqlRefreshMaterializedView); 278 addCmd(TBaseType.rrw_postgresql_reindex, ESqlStatementType.sstReindex); 279 280 // RELEASE, RESET, REVOKE 281 addCmd(TBaseType.rrw_release, ESqlStatementType.sstpostgresqlReleaseSavepoint); 282 addCmd(TBaseType.rrw_release, "savepoint", ESqlStatementType.sstpostgresqlReleaseSavepoint); 283 addCmd(TBaseType.rrw_reset, ESqlStatementType.sstpostgresqlReset); 284 addCmd(TBaseType.rrw_revoke, ESqlStatementType.sstpostgresqlRevoke); 285 286 // ROLLBACK 287 addCmd(TBaseType.rrw_rollback, ESqlStatementType.sstpostgresqlRollback); 288 addCmd(TBaseType.rrw_rollback, "prepared", ESqlStatementType.sstpostgresqlRollbackPrepared); 289 addCmd(TBaseType.rrw_rollback, "to", "savepoint", ESqlStatementType.sstpostgresqlRollbackToSavepoint); 290 291 // SAVEPOINT 292 addCmd(TBaseType.rrw_savepoint, ESqlStatementType.sstpostgresqlSavepoint); 293 294 // SECURITY LABEL 295 addCmd(TBaseType.rrw_postgresql_security, "label", ESqlStatementType.sstpostgresqlSecurityLabel); 296 297 // SELECT 298 addCmd(TBaseType.rrw_select, ESqlStatementType.sstselect); 299 300 // SET commands 301 addCmd(TBaseType.rrw_set, ESqlStatementType.sstpostgresqlSet); 302 addCmd(TBaseType.rrw_set, "constraints", ESqlStatementType.sstpostgresqlSetConstraints); 303 addCmd(TBaseType.rrw_set, "local", "role", ESqlStatementType.sstpostgresqlSetRole); 304 addCmd(TBaseType.rrw_set, "local", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 305 addCmd(TBaseType.rrw_set, "role", ESqlStatementType.sstpostgresqlSetRole); 306 addCmd(TBaseType.rrw_set, "search_path", ESqlStatementType.sstpostgresqlSetSearchPath); 307 addCmd(TBaseType.rrw_set, "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 308 addCmd(TBaseType.rrw_set, "session", "characteristics", "as", "transaction", ESqlStatementType.sstpostgresqlSetTransaction); 309 addCmd(TBaseType.rrw_set, "session", "role", ESqlStatementType.sstpostgresqlSetRole); 310 addCmd(TBaseType.rrw_set, "session", "session", "authorization", ESqlStatementType.sstpostgresqlSetSessionAuthorization); 311 addCmd(TBaseType.rrw_set, "transaction", ESqlStatementType.sstpostgresqlSetTransaction); 312 313 // SHOW 314 addCmd(TBaseType.rrw_show, ESqlStatementType.sstpostgresqlShow); 315 addCmd(TBaseType.rrw_show, "search_path", ESqlStatementType.sstpostgresqlShowSearchPath); 316 317 // START, TABLE, TRUNCATE 318 addCmd(TBaseType.rrw_start, "transaction", ESqlStatementType.sstStartTransaction); 319 addCmd(TBaseType.rrw_table, ESqlStatementType.sstPostgresqlTable); 320 addCmd(TBaseType.rrw_truncate, ESqlStatementType.sstpostgresqlTruncate); 321 322 // UNLISTEN, UPDATE 323 addCmd(TBaseType.rrw_postgresql_unlisten, ESqlStatementType.sstpostgresqlUnlisten); 324 addCmd(TBaseType.rrw_update, ESqlStatementType.sstupdate); 325 326 // VACUUM, VALUES 327 addCmd(TBaseType.rrw_postgresql_vacuum, ESqlStatementType.sstVacuum); 328 addCmd(TBaseType.rrw_values, ESqlStatementType.sstValues); 329 } 330 331 332 @Override 333 public TCustomSqlStatement issql(TSourceToken token, EFindSqlStateType state, TCustomSqlStatement currentStatement) { 334 TCustomSqlStatement ret = null; 335 336 gnewsqlstatementtype = ESqlStatementType.sstinvalid; 337 338 // Skip comments, whitespace, and semicolons 339 if ((token.tokencode == TBaseType.cmtdoublehyphen) 340 || (token.tokencode == TBaseType.cmtslashstar) 341 || (token.tokencode == TBaseType.lexspace) 342 || (token.tokencode == TBaseType.lexnewline) 343 || (token.tokentype == ETokenType.ttsemicolon)) { 344 return null; 345 } 346 347 int lcpos = token.posinlist; 348 TSourceTokenList lcsourcetokenlist = token.container; 349 TCustomSqlStatement lccurrentsqlstatement = currentStatement; 350 351 // Subquery after semicolon or at first line 352 if ((state == EFindSqlStateType.stnormal) && (token.tokentype == ETokenType.ttleftparenthesis)) { // ( 353 int k = lcsourcetokenlist.solidtokenafterpos(lcpos, TBaseType.rrw_select, 1, "("); 354 if (k > 0) { 355 ret = new TSelectSqlStatement(vendor); 356 } 357 return ret; 358 } 359 360 // CTE detection 361 if ((state == EFindSqlStateType.stnormal) && (token.tokencode == TBaseType.rrw_with)) { 362 ret = findcte(token); 363 if (ret != null) return ret; 364 } 365 366 gnewsqlstatementtype = getStatementTypeForToken(token); 367 368 TSourceToken lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 369 370 switch (gnewsqlstatementtype) { 371 case sstinvalid: { 372 ret = null; 373 374 if (state == EFindSqlStateType.stnormal) { 375 if (token.tokencode == TBaseType.label_begin) { 376 ret = new TCommonBlock(vendor); 377 gnewsqlstatementtype = ret.sqlstatementtype; 378 } else if (token.tokencode == TBaseType.rrw_declare) { 379 ret = new TCommonBlock(vendor); 380 gnewsqlstatementtype = ret.sqlstatementtype; 381 } else if (token.tokencode == TBaseType.rrw_begin) { 382 ret = new TCommonBlock(vendor); 383 gnewsqlstatementtype = ret.sqlstatementtype; 384 } else if (token.tokencode == TBaseType.rrw_procedure) { 385 ret = new TCreateProcedureStmt(vendor); 386 gnewsqlstatementtype = ret.sqlstatementtype; 387 } else if (token.tokencode == TBaseType.rrw_function) { 388 ret = new TCreateFunctionStmt(vendor); 389 gnewsqlstatementtype = ret.sqlstatementtype; 390 } 391 } 392 break; 393 } 394 395 case sstselect: { 396 boolean lcisnewsql = true; 397 398 if (state != EFindSqlStateType.stnormal) { 399 if (lcprevsolidtoken != null) { 400 if (lcprevsolidtoken.tokentype == ETokenType.ttleftparenthesis) 401 lcisnewsql = false; // subquery 402 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_union) 403 lcisnewsql = false; 404 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_intersect) 405 lcisnewsql = false; 406 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_minus) 407 lcisnewsql = false; 408 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_except) 409 lcisnewsql = false; 410 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_return) 411 lcisnewsql = false; 412 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_as) { 413 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreatetable) 414 lcisnewsql = false; 415 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstcreateview) 416 lcisnewsql = false; 417 } 418 419 if (lcisnewsql && (lcprevsolidtoken.tokencode == TBaseType.rrw_all)) { 420 TSourceToken lcpprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcprevsolidtoken.posinlist); 421 if (lcpprevsolidtoken != null) { 422 if (lcpprevsolidtoken.tokencode == TBaseType.rrw_union) 423 lcisnewsql = false; 424 } 425 } 426 } 427 428 if (lccurrentsqlstatement != null) { 429 if (lccurrentsqlstatement.sqlstatementtype == ESqlStatementType.sstinsert) 430 lcisnewsql = false; 431 } 432 } 433 434 if (lcisnewsql) 435 ret = new TSelectSqlStatement(vendor); 436 437 break; 438 } 439 440 case sstinsert: { 441 boolean lcisnewsql = true; 442 if (state != EFindSqlStateType.stnormal) { 443 if (lccurrentsqlstatement != null) { 444 // Future vendor-specific logic 445 } 446 } 447 448 if (lcisnewsql) 449 ret = new TInsertSqlStatement(vendor); 450 451 break; 452 } 453 454 case sstupdate: { 455 boolean lcisnewsql = true; 456 if (state != EFindSqlStateType.stnormal) { 457 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 458 if (lcprevsolidtoken != null) { 459 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 460 lcisnewsql = false; 461 else if (lcprevsolidtoken.tokencode == TBaseType.rrw_for) 462 lcisnewsql = false; 463 } 464 465 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 466 if (lcnextsolidtoken != null) { 467 if (lcnextsolidtoken.tokentype == ETokenType.ttleftparenthesis) { 468 int k = lcsourcetokenlist.solidtokenafterpos(lcnextsolidtoken.posinlist, TBaseType.rrw_select, 1, "("); 469 if (k == 0) lcisnewsql = false; 470 } 471 } 472 473 if (lccurrentsqlstatement != null) { 474 // Future vendor-specific logic 475 } 476 } 477 478 if (lcisnewsql) { 479 ret = new TUpdateSqlStatement(vendor); 480 ret.dummytag = 1; // means set clause in update is not found yet 481 } 482 break; 483 } 484 485 case sstdelete: { 486 boolean lcisnewsql = true; 487 488 if (state != EFindSqlStateType.stnormal) { 489 lcprevsolidtoken = lcsourcetokenlist.solidtokenbefore(lcpos); 490 if (lcprevsolidtoken != null) { 491 if (lcprevsolidtoken.tokencode == TBaseType.rrw_on) 492 lcisnewsql = false; 493 } 494 495 if (lccurrentsqlstatement != null) { 496 // Future vendor-specific logic 497 } 498 } 499 500 if (lcisnewsql) 501 ret = new TDeleteSqlStatement(vendor); 502 503 break; 504 } 505 506 case sstmerge: 507 ret = new TMergeSqlStatement(vendor); 508 ret.sqlstatementtype = gnewsqlstatementtype; 509 break; 510 511 case sstoraclecommit: 512 case sstoraclerollback: 513 case sstoraclesavepoint: 514 case sstoraclerevoke: 515 case sstoraclegrant: 516 case sstoracleanalyze: 517 case sstoracletruncate: 518 ret = new TUnknownSqlStatement(vendor); 519 ret.sqlstatementtype = gnewsqlstatementtype; 520 break; 521 522 case sstcreatetable: 523 ret = new TCreateTableSqlStatement(vendor); 524 break; 525 526 case sstoraclecreateview: 527 ret = new TCreateViewSqlStatement(vendor); 528 break; 529 530 case sstcreatematerializedview: 531 ret = new TCreateMaterializedSqlStatement(vendor); 532 break; 533 534 case sstoraclecreateindex: 535 ret = new TCreateIndexSqlStatement(vendor); 536 break; 537 538 case sstoraclecreatedatabase: 539 ret = new TCreateDatabaseSqlStatement(vendor); 540 break; 541 542 case sstoracledroptable: 543 ret = new TDropTableSqlStatement(vendor); 544 break; 545 546 case sstoracledropview: 547 ret = new TDropViewSqlStatement(vendor); 548 break; 549 550 case sstoracledropindex: 551 ret = new TDropIndexSqlStatement(vendor); 552 break; 553 554 case sstaltertable: 555 ret = new TAlterTableStatement(vendor); 556 break; 557 558 case sstoraclealtersession: 559 ret = new TAlterSessionStatement(vendor); 560 break; 561 562 case sstCommentOn: 563 ret = new TCommentOnSqlStmt(vendor); 564 break; 565 566 case sstoraclecreatesequence: 567 ret = new TCreateSequenceStmt(vendor); 568 break; 569 570 // PostgreSQL-specific statement types 571 case sstpostgresqlCreateIndex: 572 ret = new TCreateIndexSqlStatement(vendor); 573 break; 574 575 case sstpostgresqlCreateView: 576 ret = new TCreateViewSqlStatement(vendor); 577 break; 578 579 case sstpostgresqlCreateFunction: 580 ret = new TCreateFunctionStmt(vendor); 581 break; 582 583 case sstcreatetrigger: 584 ret = new TCreateTriggerStmt(vendor); 585 break; 586 587 case sstpostgresqlMove: 588 ret = new TMoveStmt(vendor); 589 break; 590 591 case sstpostgresqlTruncate: 592 ret = new TTruncateStatement(vendor); 593 break; 594 595 case sstpostgresqlExecute: 596 ret = new TExecuteSqlStatement(vendor); 597 break; 598 599 case sstpostgresqlDropTable: 600 ret = new TDropTableSqlStatement(vendor); 601 break; 602 603 case sstPostgresqlBlock: 604 ret = new TCommonBlock(vendor); 605 break; 606 607 case sstVacuum: 608 ret = new TVacuumStmt(vendor); 609 break; 610 611 case sstReindex: 612 ret = new TReindexStmt(vendor); 613 break; 614 615 case sstcreateprocedure: 616 ret = new TCreateProcedureStmt(vendor); 617 break; 618 619 case sstpostgresqlCommit: 620 ret = new TCommitStmt(vendor); 621 break; 622 623 case sstpostgresqlCreateSchema: 624 ret = new TCreateSchemaSqlStatement(vendor); 625 break; 626 627 case sstpostgresqlDropSchema: 628 ret = new TDropSchemaSqlStatement(vendor); 629 break; 630 631 case sstpostgresqlShowSearchPath: 632 ret = new TShowSearchPathStmt(vendor); 633 break; 634 635 case sstpostgresqlCopy: 636 ret = new TCopyStmt(vendor); 637 break; 638 639 case sstcall: 640 ret = new TCallStatement(vendor); 641 break; 642 643 case sstpostgresqlAlterSchema: 644 ret = new TAlterSchemaStmt(vendor); 645 break; 646 647 case sstpostgresqlAlterfunction: 648 ret = new TAlterFunctionStmt(vendor); 649 break; 650 651 case sstStartTransaction: 652 ret = new TStartTransactionStmt(vendor); 653 break; 654 655 case sstpostgresqlComment: 656 ret = new TCommentOnSqlStmt(vendor); 657 break; 658 659 case sstpostgresqlShow: 660 ret = new TShowStmt(vendor); 661 break; 662 663 case sstpostgresqlSetSearchPath: 664 case sstpostgresqlSet: 665 if (state == EFindSqlStateType.stnormal) { 666 ret = new TSetStmt(vendor); 667 } 668 break; 669 670 case sstpostgresqlDropFunction: 671 ret = new TDropFunctionStmt(vendor); 672 break; 673 674 case sstpostgresqlDropTrigger: 675 ret = new TDropTriggerSqlStatement(vendor); 676 break; 677 678 case sstpostgresqlDropProcedure: 679 ret = new TDropProcedureStmt(vendor); 680 break; 681 682 case sstdropindex: 683 ret = new TDropIndexSqlStatement(vendor); 684 break; 685 686 case sstpostgresqlDropSequence: 687 ret = new TDropSequenceStmt(vendor); 688 break; 689 690 case sstpostgresqlDropView: 691 ret = new TDropViewSqlStatement(vendor); 692 break; 693 694 case sstpostgresqlCreateSequence: 695 ret = new TCreateSequenceStmt(vendor); 696 break; 697 698 case sstpostgresqlAlterSequence: 699 ret = new TAlterSequenceStatement(vendor); 700 break; 701 702 case sstpostgresqlCreateType: 703 ret = new TCreateTypeStmt(vendor); 704 break; 705 706 case sstcreateExtension: 707 ret = new TCreateExtensionStmt(vendor); 708 break; 709 710 case sstpostgresqlCreateForeignTable: 711 ret = new TCreateTableSqlStatement(vendor); 712 break; 713 714 case sstPostgresqlTable: 715 ret = new TPostgresqlTableStmt(vendor); 716 break; 717 718 case sstpostgresqlDropMaterializedView: 719 ret = new TDropMaterializedViewStmt(vendor); 720 break; 721 722 case sstpostgresqlDo: { 723 boolean lcisnewsql = false; 724 725 if (state == EFindSqlStateType.stnormal) { 726 TSourceToken lcnextsolidtoken = lcsourcetokenlist.nextsolidtoken(lcpos, 1, false); 727 if (lcnextsolidtoken != null) { 728 if (lcnextsolidtoken.tokencode == TBaseType.rrw_postgresql_function_delimiter) 729 lcisnewsql = true; 730 else if (lcnextsolidtoken.tokencode == TBaseType.rrw_postgresql_language) { 731 // DO LANGUAGE plpgsql $$ ... $$ 732 lcisnewsql = true; 733 } 734 } 735 } 736 737 if (lcisnewsql) 738 ret = new TDoExecuteBlockStmt(vendor); 739 740 break; 741 } 742 743 case sstpostgresqlDeclare: { 744 // Distinguish between DECLARE CURSOR (standalone SQL statement) and 745 // PL/pgSQL DECLARE block. 746 // DECLARE name [BINARY] [INSENSITIVE|ASENSITIVE] [[NO] SCROLL] CURSOR ... 747 // If DECLARE is followed by an identifier, then one of CURSOR/BINARY/ 748 // INSENSITIVE/ASENSITIVE/NO/SCROLL, it's a cursor declaration. 749 boolean isCursorDecl = false; 750 TSourceToken st = token.nextSolidToken(); 751 if (st != null && st.tokencode == TBaseType.ident) { 752 TSourceToken st2 = st.nextSolidToken(); 753 if (st2 != null) { 754 String s2 = st2.toString().toUpperCase(); 755 if (s2.equals("CURSOR") || s2.equals("BINARY") 756 || s2.equals("INSENSITIVE") || s2.equals("ASENSITIVE") 757 || s2.equals("NO") || s2.equals("SCROLL")) { 758 isCursorDecl = true; 759 } 760 } 761 } 762 if (isCursorDecl) { 763 ret = new TDeclareCursorStmt(vendor); 764 gnewsqlstatementtype = ret.sqlstatementtype; 765 token.tokencode = TBaseType.rrw_postgresql_declare_cursor_stmt; 766 } else { 767 ret = new TCommonBlock(vendor); 768 gnewsqlstatementtype = ret.sqlstatementtype; 769 } 770 break; 771 } 772 773 case sstpostgresqlExplain: 774 ret = new TExplainPlan(vendor); 775 gnewsqlstatementtype = ret.sqlstatementtype; 776 break; 777 778 case sstpostgresqlCreateRole: 779 ret = new TCreateRoleStmt(vendor); 780 break; 781 782 case sstpostgresqlAlterRole: 783 ret = new TAlterRoleStmt(vendor); 784 break; 785 786 case sstpostgresqlAlterIndex: 787 ret = new TAlterIndexStmt(vendor); 788 break; 789 790 case sstpostgresqlGrant: 791 ret = new TGrantSqlStatement(vendor); 792 break; 793 794 case sst_returnstmt: 795 ret = new TReturnStmt(vendor); 796 break; 797 798 case sstpostgresqlRevoke: 799 ret = new TRevokeStmt(vendor); 800 break; 801 802 default: 803 ret = new TUnknownSqlStatement(vendor); 804 ret.sqlstatementtype = gnewsqlstatementtype; 805 break; 806 } 807 808 return ret; 809 } 810 811}