From 8dcf876fe9a06f3360b8d260459cdff050b2aa00 Mon Sep 17 00:00:00 2001 From: Federico Caselli Date: Mon, 13 Apr 2020 12:16:21 +0200 Subject: Added reflection method :meth:`.Inspector.get_sequence_names` Added new reflection method :meth:`.Inspector.get_sequence_names` which returns all the sequences defined. Support for this method has been added to the backend that support :class:`.Sequence`: PostgreSql, Oracle, MSSQL and MariaDB >= 10.3. Fixes: #2056 Change-Id: I0949696a39aa28c849edf2504779241f7443778a --- lib/sqlalchemy/dialects/postgresql/base.py | 65 +++++++++++++++--------------- 1 file changed, 33 insertions(+), 32 deletions(-) (limited to 'lib/sqlalchemy/dialects/postgresql/base.py') diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py index 441e77a37..2bfb9b494 100644 --- a/lib/sqlalchemy/dialects/postgresql/base.py +++ b/lib/sqlalchemy/dialects/postgresql/base.py @@ -2682,39 +2682,23 @@ class PGDialect(default.DefaultDialect): def has_sequence(self, connection, sequence_name, schema=None): if schema is None: - cursor = connection.execute( - sql.text( - "SELECT relname FROM pg_class c join pg_namespace n on " - "n.oid=c.relnamespace where relkind='S' and " - "n.nspname=current_schema() " - "and relname=:name" - ).bindparams( - sql.bindparam( - "name", - util.text_type(sequence_name), - type_=sqltypes.Unicode, - ) - ) - ) - else: - cursor = connection.execute( - sql.text( - "SELECT relname FROM pg_class c join pg_namespace n on " - "n.oid=c.relnamespace where relkind='S' and " - "n.nspname=:schema and relname=:name" - ).bindparams( - sql.bindparam( - "name", - util.text_type(sequence_name), - type_=sqltypes.Unicode, - ), - sql.bindparam( - "schema", - util.text_type(schema), - type_=sqltypes.Unicode, - ), - ) + schema = self.default_schema_name + cursor = connection.execute( + sql.text( + "SELECT relname FROM pg_class c join pg_namespace n on " + "n.oid=c.relnamespace where relkind='S' and " + "n.nspname=:schema and relname=:name" + ).bindparams( + sql.bindparam( + "name", + util.text_type(sequence_name), + type_=sqltypes.Unicode, + ), + sql.bindparam( + "schema", util.text_type(schema), type_=sqltypes.Unicode, + ), ) + ) return bool(cursor.first()) @@ -2870,6 +2854,23 @@ class PGDialect(default.DefaultDialect): ) return [name for name, in result] + @reflection.cache + def get_sequence_names(self, connection, schema=None, **kw): + if not schema: + schema = self.default_schema_name + cursor = connection.execute( + sql.text( + "SELECT relname FROM pg_class c join pg_namespace n on " + "n.oid=c.relnamespace where relkind='S' and " + "n.nspname=:schema" + ).bindparams( + sql.bindparam( + "schema", util.text_type(schema), type_=sqltypes.Unicode, + ), + ) + ) + return [row[0] for row in cursor] + @reflection.cache def get_view_definition(self, connection, view_name, schema=None, **kw): view_def = connection.scalar( -- cgit v1.2.1