]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
- restore _render_server_default_for_compare() to compare.py using
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 20 Sep 2014 17:53:11 +0000 (13:53 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 20 Sep 2014 17:53:11 +0000 (13:53 -0400)
the method previously used in _render_server_default() in render;
these two functions become more specific to compare vs. render now
so are separated out

alembic/autogenerate/compare.py
tests/test_postgresql.py

index bfca75e65c9d7e7446d7163b7dbfc722f079932c..b5af2d89b8227e1fb0c30bb0f2ac31e151608cc0 100644 (file)
@@ -1,11 +1,9 @@
 from sqlalchemy import schema as sa_schema, types as sqltypes
-from sqlalchemy.exc import NoSuchTableError
-from sqlalchemy import sql
 import logging
 from .. import compat
-from .render import _render_server_default, _render_potential_expr
 from sqlalchemy.util import OrderedSet
-
+import re
+from .render import _user_defined_render
 
 log = logging.getLogger(__name__)
 
@@ -477,9 +475,25 @@ def _compare_type(schema, tname, cname, conn_col,
 
 def _render_server_default_for_compare(metadata_default,
                                        metadata_col, autogen_context):
-    return _render_server_default(
-        metadata_default, autogen_context,
-        repr_=metadata_col.type._type_affinity is sqltypes.String)
+    rendered = _user_defined_render(
+        "server_default", metadata_default, autogen_context)
+    if rendered is not False:
+        return rendered
+
+    if isinstance(metadata_default, sa_schema.DefaultClause):
+        if isinstance(metadata_default.arg, compat.string_types):
+            metadata_default = metadata_default.arg
+        else:
+            metadata_default = str(metadata_default.arg.compile(
+                dialect=autogen_context['dialect']))
+    if isinstance(metadata_default, compat.string_types):
+        if metadata_col.type._type_affinity is sqltypes.String:
+            metadata_default = re.sub(r"^'|'$", "", metadata_default)
+            return repr(metadata_default)
+        else:
+            return metadata_default
+    else:
+        return None
 
 
 def _compare_server_default(schema, tname, cname, conn_col, metadata_col,
index abfe0ed5d256aac73646d2f91c4be8ffa73fb5ce..36b3e49857dd37af7f4eb52f7cffc283a55e9171 100644 (file)
@@ -173,7 +173,13 @@ class PostgresqlDefaultCompareTest(TestBase):
             'imports': set(),
             'connection': connection,
             'dialect': connection.dialect,
-            'context': context
+            'context': context,
+            'opts': {
+                'compare_type': True,
+                'compare_server_default': True,
+                'alembic_module_prefix': 'op.',
+                'sqlalchemy_module_prefix': 'sa.',
+            }
         }
 
     @classmethod