From: Mike Bayer Date: Wed, 3 Sep 2008 17:59:43 +0000 (+0000) Subject: - has_sequence() now takes the current "schema" argument into X-Git-Tag: rel_0_5rc1~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57f79671bff13ef3518ec5647b5746bdb0035924;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - has_sequence() now takes the current "schema" argument into account [ticket:1155] --- diff --git a/CHANGES b/CHANGES index f834ea5d8a..410f8647d5 100644 --- a/CHANGES +++ b/CHANGES @@ -142,7 +142,8 @@ CHANGES and instead uses subqueries in conjunction with a special Oracle optimization comment. Allows LIMIT/OFFSET to work in conjunction with DISTINCT. [ticket:536] - + - has_sequence() now takes the current "schema" argument into + account [ticket:1155] 0.5beta3 ======== diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index ed2cb3ef20..4ab27152ef 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -362,8 +362,10 @@ class OracleDialect(default.DefaultDialect): cursor = connection.execute("""select table_name from all_tables where table_name=:name and owner=:schema_name""", {'name':self._denormalize_name(table_name), 'schema_name':self._denormalize_name(schema)}) return cursor.fetchone() is not None - def has_sequence(self, connection, sequence_name): - cursor = connection.execute("""select sequence_name from all_sequences where sequence_name=:name""", {'name':self._denormalize_name(sequence_name)}) + def has_sequence(self, connection, sequence_name, schema=None): + if not schema: + schema = self.get_default_schema_name(connection) + cursor = connection.execute("""select sequence_name from all_sequences where sequence_name=:name and sequence_owner=:schema_name""", {'name':self._denormalize_name(sequence_name), 'schema_name':self._denormalize_name(schema)}) return cursor.fetchone() is not None def _normalize_name(self, name): @@ -746,13 +748,13 @@ class OracleSchemaGenerator(compiler.SchemaGenerator): return colspec def visit_sequence(self, sequence): - if not self.checkfirst or not self.dialect.has_sequence(self.connection, sequence.name): + if not self.checkfirst or not self.dialect.has_sequence(self.connection, sequence.name, sequence.schema): self.append("CREATE SEQUENCE %s" % self.preparer.format_sequence(sequence)) self.execute() class OracleSchemaDropper(compiler.SchemaDropper): def visit_sequence(self, sequence): - if not self.checkfirst or self.dialect.has_sequence(self.connection, sequence.name): + if not self.checkfirst or self.dialect.has_sequence(self.connection, sequence.name, sequence.schema): self.append("DROP SEQUENCE %s" % self.preparer.format_sequence(sequence)) self.execute() diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 2c01cdc172..336a29497e 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -174,7 +174,7 @@ class Dialect(object): raise NotImplementedError() - def has_sequence(self, connection, sequence_name): + def has_sequence(self, connection, sequence_name, schema=None): """Check the existence of a particular sequence in the database. Given a [sqlalchemy.engine#Connection] object and a string @@ -1904,6 +1904,7 @@ def connection_memoize(key): """ @util.decorator def decorated(fn, self, connection): + connection = connection.connect() try: return connection.info[key] except KeyError: