]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
adding mike's patch
authorCarlos Eduardo Rivera <cerivera@fastmail.fm>
Wed, 27 Aug 2014 10:35:47 +0000 (05:35 -0500)
committerCarlos Eduardo Rivera <cerivera@fastmail.fm>
Wed, 27 Aug 2014 10:35:47 +0000 (05:35 -0500)
alembic/autogenerate/render.py
tests/test_autogen_render.py

index fc8dfa5e3ee29ecfbcad8e955127747f9de59e4d..1b49804bffcfabf5285dff3c713a187d7160859f 100644 (file)
@@ -320,29 +320,13 @@ def _render_server_default(default, autogen_context, repr_=True):
     if rendered is not False:
         return rendered
 
-    add_text_wrap = False
     if isinstance(default, sa_schema.DefaultClause):
-        add_text_wrap = isinstance(default.arg, sql.elements.TextClause)
+        default = _render_potential_expr(default.arg, autogen_context)
 
-        if isinstance(default.arg, string_types):
-            default = default.arg
-        else:
-            default = str(default.arg.compile(
-                            dialect=autogen_context['dialect']))
-
-    if isinstance(default, string_types):
-        if repr_:
-            default = repr(re.sub(r"^'|'$", "", default))
-
-        if add_text_wrap:
-            default = "%(prefix)stext(%(default)s)" % {
-                    'prefix': _sqlalchemy_autogenerate_prefix(autogen_context),
-                    'default': default
-                }
+    elif isinstance(default, string_types) and repr_:
+        default = repr(re.sub(r"^'|'$", "", default))
 
-        return default
-    else:
-        return None
+    return default
 
 def _repr_type(type_, autogen_context):
     rendered = _user_defined_render("type", type_, autogen_context)
index 01b66b64d8b6a9b58dbfe83fc6f0bb0bc291e7d3..9cd2d823b7a51ab2d35f2fee822c2de810c7faa0 100644 (file)
@@ -9,7 +9,7 @@ from sqlalchemy import MetaData, Column, Table, Integer, String, Text, \
     PrimaryKeyConstraint, Index, func, text
 from sqlalchemy.types import TIMESTAMP
 from sqlalchemy.dialects import mysql, postgresql
-from sqlalchemy.sql import and_, column, literal_column
+from sqlalchemy.sql import and_, column, literal_column, false
 
 from . import patch
 
@@ -771,7 +771,6 @@ class RenderNamingConventionTest(TestCase):
             'dialect': postgresql.dialect()
         }
 
-
     def setUp(self):
 
         convention = {
@@ -914,7 +913,7 @@ class RenderNamingConventionTest(TestCase):
             "sa.CheckConstraint('im a constraint', name=op.f('ck_t_cc1'))"
         )
 
-    def test_render_col_with_text_server_default(self):
+    def test_render_server_default_text(self):
         c = Column('updated_at', TIMESTAMP(),
                 server_default=text('now()'),
                 nullable=False)
@@ -926,4 +925,57 @@ class RenderNamingConventionTest(TestCase):
             'sa.Column(\'updated_at\', sa.TIMESTAMP(), '
                 'server_default=sa.text(\'now()\'), '
                 'nullable=False)'
-        )
\ No newline at end of file
+        )
+
+    def test_render_server_default_native_boolean(self):
+        c = Column('updated_at', Boolean(),
+                server_default=false(),
+                nullable=False)
+        result = autogenerate.render._render_column(
+                    c, self.autogen_context
+                )
+        eq_(
+            result,
+            'sa.Column(\'updated_at\', sa.Boolean(), '
+                'server_default=sa.text(\'false\'), '
+                'nullable=False)'
+        )
+
+    def test_render_server_default_non_native_boolean(self):
+        c = Column('updated_at', Boolean(),
+                server_default=false(),
+                nullable=False)
+        autogen_context = {
+            'opts': {
+                'sqlalchemy_module_prefix': 'sa.',
+                'alembic_module_prefix': 'op.',
+            },
+            'dialect': mysql.dialect()
+        }
+
+        result = autogenerate.render._render_column(
+                    c, autogen_context
+                )
+        eq_(
+            result,
+            'sa.Column(\'updated_at\', sa.Boolean(), '
+                'server_default=sa.text(\'0\'), '
+                'nullable=False)'
+        )
+
+    def test_render_server_default_func(self):
+        c = Column('updated_at', TIMESTAMP(),
+                server_default=func.now(),
+                nullable=False)
+        result = autogenerate.render._render_column(
+                    c, self.autogen_context
+                )
+        eq_(
+            result,
+            'sa.Column(\'updated_at\', sa.TIMESTAMP(), '
+                'server_default=sa.text(\'now()\'), '
+                'nullable=False)'
+        )
+
+
+