]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- added "schema" argument to Sequence; use this with Postgres /Oracle when the sequen...
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 22 Sep 2007 17:14:15 +0000 (17:14 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 22 Sep 2007 17:14:15 +0000 (17:14 +0000)
  located in an alternate schema.  Implements part of [ticket:584], should fix [ticket:761].

CHANGES
lib/sqlalchemy/schema.py
lib/sqlalchemy/sql/compiler.py
test/dialect/oracle.py
test/dialect/postgres.py

diff --git a/CHANGES b/CHANGES
index 9cc170505d50531077156321308c2d1755809677..6ecb23bc133e03febe80616e8cf8d74b4089ffb3 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -28,6 +28,9 @@ CHANGES
   But this doesn't work for dictionaries.  Pickled objects which provide an 
   adequate __eq__() implementation can be set up with "PickleType(comparator=operator.eq)"
   [ticket:560]
+
+- added "schema" argument to Sequence; use this with Postgres /Oracle when the sequence is
+  located in an alternate schema.  Implements part of [ticket:584], should fix [ticket:761].
   
 - Fixed reflection of the empty string for mysql enums.
 
index 3b7f08f79cdeaf340953163df4cad5dcaa5dc26d..713adc5854277f4df84e52bc5976a8dced7c612f 100644 (file)
@@ -770,13 +770,14 @@ class ColumnDefault(DefaultGenerator):
 class Sequence(DefaultGenerator):
     """Represent a sequence, which applies to Oracle and Postgres databases."""
 
-    def __init__(self, name, start = None, increment = None, optional=False, quote=False, **kwargs):
+    def __init__(self, name, start = None, increment = None, schema=None, optional=False, quote=False, **kwargs):
         super(Sequence, self).__init__(**kwargs)
         self.name = name
         self.start = start
         self.increment = increment
         self.optional=optional
         self.quote = quote
+        self.schema = schema
 
     def __repr__(self):
         return "Sequence(%s)" % ', '.join(
index 2b4786cb25624a9ddddcdd1ec7b61812a4f22ea2..4fca6b2eccb55650b5d6ef7358be37d940d7ea3d 100644 (file)
@@ -1000,8 +1000,11 @@ class IdentifierPreparer(object):
     def should_quote(self, object):
         return object.quote or self._requires_quotes(object.name)
 
-    def format_sequence(self, sequence):
-        return self.__generic_obj_format(sequence, sequence.name)
+    def format_sequence(self, sequence, use_schema=True):
+        name = self.__generic_obj_format(sequence, sequence.name)
+        if use_schema and sequence.schema is not None:
+            name = self.__generic_obj_format(sequence, sequence.schema) + "." + name
+        return name
 
     def format_label(self, label, name=None):
         return self.__generic_obj_format(label, name or label.name)
index a717a7338f5afc7fd1bb09f8aad4c147997a9751..cbad7ced89e23d9ff11de646c23524ee98cbf976 100644 (file)
@@ -119,6 +119,19 @@ myothertable.othername != :myothertable_othername OR EXISTS (select yay from foo
             "addresses.address_type_id, addresses.email_address FROM addresses LEFT OUTER JOIN address_types address_types_1 "
             "ON addresses.address_type_id = address_types_1.id WHERE addresses.user_id = :addresses_user_id ORDER BY addresses.rowid, "
             "address_types.rowid")
+
+class SequenceTest(SQLCompileTest):
+    def test_basic(self):
+        seq = Sequence("my_seq_no_schema")
+        dialect = oracle.OracleDialect()
+        assert dialect.identifier_preparer.format_sequence(seq) == "my_seq_no_schema"
+
+        seq = Sequence("my_seq", schema="some_schema")
+        assert dialect.identifier_preparer.format_sequence(seq) == "some_schema.my_seq"
+
+        seq = Sequence("My_Seq", schema="Some_Schema")
+        assert dialect.identifier_preparer.format_sequence(seq) == '"Some_Schema"."My_Seq"'
         
+    
 if __name__ == '__main__':
     testbase.main()
index 06cebaf17dc87de626c4cbbc78db567c80308766..bae1f666deb9e348c5386ef82acea093ccc212db 100644 (file)
@@ -5,6 +5,18 @@ from sqlalchemy import exceptions
 from sqlalchemy.databases import postgres
 from testlib import *
 
+class SequenceTest(SQLCompileTest):
+    def test_basic(self):
+        seq = Sequence("my_seq_no_schema")
+        dialect = postgres.PGDialect()
+        assert dialect.identifier_preparer.format_sequence(seq) == "my_seq_no_schema"
+
+        seq = Sequence("my_seq", schema="some_schema")
+        assert dialect.identifier_preparer.format_sequence(seq) == "some_schema.my_seq"
+
+        seq = Sequence("My_Seq", schema="Some_Schema")
+        assert dialect.identifier_preparer.format_sequence(seq) == '"Some_Schema"."My_Seq"'
+
 class InsertTest(AssertMixin):
     @testing.supported('postgres')
     def setUpAll(self):