diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-06-23 13:49:44 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-06-23 13:49:44 -0400 |
commit | de24f3e1b1a2264845779267d1fe3f406fc2cbf4 (patch) | |
tree | 27b28902cc8fa1aaae48f22f0d7ca8d9c2f127e7 /alembic/ddl | |
parent | 42b109c414aca7b1cf9069c1e1168a20dea3b343 (diff) | |
download | alembic-de24f3e1b1a2264845779267d1fe3f406fc2cbf4.tar.gz |
- Some deep-in-the-weeds fixes to try to get "server default" comparison
working better across platforms and expressions, in particular on
the Postgresql backend, mostly dealing with quoting/not quoting of various
expressions at the appropriate time and on a per-backend basis.
Repaired and tested support for such defaults as Postgresql interval
and array defaults.
fixes #212
Diffstat (limited to 'alembic/ddl')
-rw-r--r-- | alembic/ddl/postgresql.py | 9 | ||||
-rw-r--r-- | alembic/ddl/sqlite.py | 9 |
2 files changed, 15 insertions, 3 deletions
diff --git a/alembic/ddl/postgresql.py b/alembic/ddl/postgresql.py index 5ca0d1f..27f31b0 100644 --- a/alembic/ddl/postgresql.py +++ b/alembic/ddl/postgresql.py @@ -1,7 +1,7 @@ import re from sqlalchemy import types as sqltypes - +from .. import compat from .base import compiles, alter_table, format_table_name, RenameTable from .impl import DefaultImpl @@ -24,8 +24,11 @@ class PostgresqlImpl(DefaultImpl): if None in (conn_col_default, rendered_metadata_default): return conn_col_default != rendered_metadata_default - if metadata_column.type._type_affinity is not sqltypes.String: - rendered_metadata_default = re.sub(r"^'|'$", "", rendered_metadata_default) + if metadata_column.server_default is not None and \ + isinstance(metadata_column.server_default.arg, + compat.string_types) and \ + not re.match(r"^'.+'$", rendered_metadata_default): + rendered_metadata_default = "'%s'" % rendered_metadata_default return not self.connection.scalar( "SELECT %s = %s" % ( diff --git a/alembic/ddl/sqlite.py b/alembic/ddl/sqlite.py index a3c73ce..85c829e 100644 --- a/alembic/ddl/sqlite.py +++ b/alembic/ddl/sqlite.py @@ -1,5 +1,6 @@ from .. import util from .impl import DefaultImpl +import re #from sqlalchemy.ext.compiler import compiles #from .base import AddColumn, alter_table @@ -29,6 +30,14 @@ class SQLiteImpl(DefaultImpl): raise NotImplementedError( "No support for ALTER of constraints in SQLite dialect") + def compare_server_default(self, inspector_column, + metadata_column, + rendered_metadata_default, + rendered_inspector_default): + + rendered_metadata_default = re.sub(r"^'|'$", "", rendered_metadata_default) + return rendered_inspector_default != repr(rendered_metadata_default) + def correct_for_autogen_constraints(self, conn_unique_constraints, conn_indexes, metadata_unique_constraints, metadata_indexes): |