]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- has_sequence() now takes the current "schema" argument into
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 3 Sep 2008 17:59:43 +0000 (17:59 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 3 Sep 2008 17:59:43 +0000 (17:59 +0000)
      account [ticket:1155]

CHANGES
lib/sqlalchemy/databases/oracle.py
lib/sqlalchemy/engine/base.py

diff --git a/CHANGES b/CHANGES
index f834ea5d8a07659e3ea333265120598b016cfa21..410f8647d5b463f6307d85ec274b1e5ad4a52d23 100644 (file)
--- 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
 ========
index ed2cb3ef20c9230a1a6262e9f14ae68da2c2397b..4ab27152efe2bfe8df09aa881e3fdb1779e0affd 100644 (file)
@@ -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()
 
index 2c01cdc172491b9aade08330cecd25af47fc7164..336a29497e3737db4531899cb0584bada2686840 100644 (file)
@@ -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: