From: Carlos Eduardo Rivera Date: Wed, 27 Aug 2014 10:35:47 +0000 (-0500) Subject: adding mike's patch X-Git-Tag: rel_0_7_0~78^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=19930ce67a79a5253f22ce15d605e3ca476a7968;p=thirdparty%2Fsqlalchemy%2Falembic.git adding mike's patch --- diff --git a/alembic/autogenerate/render.py b/alembic/autogenerate/render.py index fc8dfa5e..1b49804b 100644 --- a/alembic/autogenerate/render.py +++ b/alembic/autogenerate/render.py @@ -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) diff --git a/tests/test_autogen_render.py b/tests/test_autogen_render.py index 01b66b64..9cd2d823 100644 --- a/tests/test_autogen_render.py +++ b/tests/test_autogen_render.py @@ -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)' + ) + + +