would not return selectable.c.col, if the selectable is a join
of a table and another join involving the same table. messed
up ORM decision making [ticket:593]
-
+ - added "explcit" create/drop/execute support for sequences
+ (i.e. you can pass a "connectable" to each of those methods
+ on Sequence)
- mysql
- added 'fields' to reserved words [ticket:590]
return colspec
def visit_sequence(self, sequence):
- if not self.dialect.has_sequence(self.connection, sequence.name):
+ if not self.checkfirst or not self.dialect.has_sequence(self.connection, sequence.name):
self.append("CREATE SEQUENCE %s" % self.preparer.format_sequence(sequence))
self.execute()
class OracleSchemaDropper(ansisql.ANSISchemaDropper):
def visit_sequence(self, sequence):
- if self.dialect.has_sequence(self.connection, sequence.name):
+ if not self.checkfirst or self.dialect.has_sequence(self.connection, sequence.name):
self.append("DROP SEQUENCE %s" % sequence.name)
self.execute()
return colspec
def visit_sequence(self, sequence):
- if not sequence.optional and (not self.dialect.has_sequence(self.connection, sequence.name)):
+ if not sequence.optional and (not self.checkfirst or not self.dialect.has_sequence(self.connection, sequence.name)):
self.append("CREATE SEQUENCE %s" % self.preparer.format_sequence(sequence))
self.execute()
class PGSchemaDropper(ansisql.ANSISchemaDropper):
def visit_sequence(self, sequence):
- if not sequence.optional and (self.dialect.has_sequence(self.connection, sequence.name)):
+ if not sequence.optional and (not self.checkfirst or self.dialect.has_sequence(self.connection, sequence.name)):
self.append("DROP SEQUENCE %s" % sequence.name)
self.execute()
return self._derived_metadata().engine
- def get_engine(self):
+ def get_engine(self, connectable=None):
"""Return the engine or raise an error if no engine."""
+ if connectable is not None:
+ return connectable
e = self._get_engine()
if e is not None:
return e
else:
self.column.default = self
- def execute(self, **kwargs):
- return self.get_engine().execute_default(self, **kwargs)
+ def execute(self, connectable=None, **kwargs):
+ return self.get_engine(connectable=connectable).execute_default(self, **kwargs)
def __repr__(self):
return "DefaultGenerator()"
super(Sequence, self)._set_parent(column)
column.sequence = self
- def create(self):
- self.get_engine().create(self)
+ def create(self, connectable=None, checkfirst=True):
+ self.get_engine(connectable=connectable).create(self, checkfirst=checkfirst)
return self
- def drop(self):
- self.get_engine().drop(self)
+ def drop(self, connectable=None, checkfirst=True):
+ self.get_engine(connectable=connectable).drop(self, checkfirst=checkfirst)
def accept_visitor(self, visitor):
"""Call the visit_seauence method on the given visitor."""
@testbase.supported('postgres', 'oracle')
- def teststandalone(self):
+ def test_implicit_sequence_exec(self):
s = Sequence("my_sequence", metadata=testbase.db)
s.create()
try:
self.assert_(x == 1)
finally:
s.drop()
+
+ @testbase.supported('postgres', 'oracle')
+ def test_explicit_sequence_exec(self):
+ s = Sequence("my_sequence")
+ s.create(testbase.db)
+ try:
+ x = s.execute(testbase.db)
+ self.assert_(x == 1)
+ finally:
+ s.drop(testbase.db)
+ @testbase.supported('postgres', 'oracle')
+ def test_checkfirst(self):
+ s = Sequence("my_sequence")
+ s.create(testbase.db, checkfirst=False)
+ s.create(testbase.db, checkfirst=True)
+ s.drop(testbase.db, checkfirst=False)
+ s.drop(testbase.db, checkfirst=True)
+
@testbase.supported('postgres', 'oracle')
def teststandalone2(self):
x = cartitems.c.cart_id.sequence.execute()