inappropriately when targeting in a result
set row. [ticket:2377]
+ - [bug] Fixed bug in "mock" strategy whereby
+ correct DDL visit method wasn't called, resulting
+ in "CREATE/DROP SEQUENCE" statements being
+ duplicated [ticket:2384]
+
- sqlite
- [bug] the "name" of an FK constraint in SQLite
is reflected as "None", not "0" or other
kwargs['checkfirst'] = False
from sqlalchemy.engine import ddl
- ddl.SchemaGenerator(self.dialect, self, **kwargs).traverse(entity)
+ ddl.SchemaGenerator(self.dialect, self, **kwargs).traverse_single(entity)
def drop(self, entity, **kwargs):
kwargs['checkfirst'] = False
from sqlalchemy.engine import ddl
- ddl.SchemaDropper(self.dialect, self, **kwargs).traverse(entity)
+ ddl.SchemaDropper(self.dialect, self, **kwargs).traverse_single(entity)
def _run_visitor(self, visitorcallable, element,
connection=None,
**kwargs):
kwargs['checkfirst'] = False
visitorcallable(self.dialect, self,
- **kwargs).traverse(element)
+ **kwargs).traverse_single(element)
def execute(self, object, *multiparams, **params):
raise NotImplementedError()
from test.lib.util import picklers
from sqlalchemy.interfaces import ConnectionProxy
from sqlalchemy import MetaData, Integer, String, INT, VARCHAR, func, \
- bindparam, select, event, TypeDecorator
+ bindparam, select, event, TypeDecorator, create_engine, Sequence
from sqlalchemy.sql import column, literal
from test.lib.schema import Table, Column
import sqlalchemy as tsa
from sqlalchemy.engine import base, default
from sqlalchemy.engine.base import Connection, Engine
from test.lib import fixtures
+import StringIO
users, metadata = None, None
class ExecuteTest(fixtures.TestBase):
assert self.buf.buffer[2].getMessage().startswith("SELECT 6")
assert len(self.buf.buffer) == 4
+class MockStrategyTest(fixtures.TestBase):
+ def _engine_fixture(self):
+ buf = StringIO.StringIO()
+ def dump(sql, *multiparams, **params):
+ buf.write(sql.compile(dialect=engine.dialect))
+ engine = create_engine('postgresql://', strategy='mock', executor=dump)
+ return engine, buf
+
+ def test_sequence_not_duped(self):
+ engine, buf = self._engine_fixture()
+ metadata = MetaData()
+ t = Table('testtable', metadata,
+ Column('pk', Integer, Sequence('testtable_pk_seq'), primary_key=True)
+ )
+
+ t.create(engine)
+ t.drop(engine)
+
+ eq_(
+ re.findall(r'CREATE (\w+)', buf.getvalue()),
+ ["SEQUENCE", "TABLE"]
+ )
+
+ eq_(
+ re.findall(r'DROP (\w+)', buf.getvalue()),
+ ["SEQUENCE", "TABLE"]
+ )
+
class ResultProxyTest(fixtures.TestBase):
def test_nontuple_row(self):