]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
Raise exception if autogenerate is tried with as_sql=True
authorJohannes Erdfelt <johannes@erdfelt.com>
Thu, 15 Jan 2015 15:37:20 +0000 (07:37 -0800)
committerJohannes Erdfelt <johannes@erdfelt.com>
Mon, 23 Feb 2015 19:08:43 +0000 (11:08 -0800)
This configuration is nonsensical since autogenerate needs to query
the database for schema information.

Fixes issue #266

alembic/autogenerate/api.py
tests/test_autogenerate.py

index cc5debe8b4720985b81e719f3265c5581e70d784..18a44a8dd36ad718702ae1da15b02a20c00ef432 100644 (file)
@@ -106,6 +106,13 @@ def compare_metadata(context, metadata):
      instance.
 
     """
+    # as_sql=True is nonsensical here. autogenerate requires a connection
+    # it can use to run queries against to get the database schema.
+    if context.opts.get('as_sql', False) is True:
+        raise util.CommandError(
+            "autogenerate can't use as_sql=True as it prevents querying "
+            "the database for schema information")
+
     autogen_context, connection = _autogen_context(context, None)
     diffs = []
 
index a458fafe7cb5a3f9a9541257f2dfbc98bea023ed..1eeeb9171fc6807958e94f863b6a73b521b8ee6a 100644 (file)
@@ -15,6 +15,7 @@ from alembic.testing.mock import Mock
 from alembic.testing.env import staging_env, clear_staging_env
 from alembic.testing import eq_
 from alembic.ddl.base import _fk_spec
+from alembic.util import CommandError
 
 py3k = sys.version_info >= (3, )
 
@@ -1350,6 +1351,20 @@ class CompareMetadataTest(ModelOne, AutogenTest, TestBase):
         eq_(diffs[2][1][5], False)
         eq_(diffs[2][1][6], True)
 
+    def test_compare_metadata_as_sql(self):
+        context = MigrationContext.configure(
+            connection=self.bind.connect(),
+            opts={'as_sql': True}
+        )
+        metadata = self.m2
+
+        try:
+            autogenerate.compare_metadata(context, metadata)
+        except CommandError:
+            pass
+        else:
+            assert False, "unexpected success"
+
 
 class PGCompareMetaData(ModelOne, AutogenTest, TestBase):
     __only_on__ = 'postgresql'