summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Erdfelt <johannes@erdfelt.com>2015-01-15 07:37:20 -0800
committerJohannes Erdfelt <johannes@erdfelt.com>2015-02-23 11:08:43 -0800
commit9e246542f53c6f470054a90585421ac725690bd7 (patch)
tree3bb454d484e2c1356bbd602e367a90b2b87bd2f8
parent2108076362cc76130ae61e14c7a0120a1f0a59c8 (diff)
downloadalembic-9e246542f53c6f470054a90585421ac725690bd7.tar.gz
Raise exception if autogenerate is tried with as_sql=True
This configuration is nonsensical since autogenerate needs to query the database for schema information. Fixes issue #266
-rw-r--r--alembic/autogenerate/api.py7
-rw-r--r--tests/test_autogenerate.py15
2 files changed, 22 insertions, 0 deletions
diff --git a/alembic/autogenerate/api.py b/alembic/autogenerate/api.py
index cc5debe..18a44a8 100644
--- a/alembic/autogenerate/api.py
+++ b/alembic/autogenerate/api.py
@@ -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 = []
diff --git a/tests/test_autogenerate.py b/tests/test_autogenerate.py
index a458faf..1eeeb91 100644
--- a/tests/test_autogenerate.py
+++ b/tests/test_autogenerate.py
@@ -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'