located in an alternate schema. Implements part of [ticket:584], should fix [ticket:761].
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.
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(
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)
"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()
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):