summaryrefslogtreecommitdiff
path: root/alembic/ddl
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-06-23 13:49:44 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-06-23 13:49:44 -0400
commitde24f3e1b1a2264845779267d1fe3f406fc2cbf4 (patch)
tree27b28902cc8fa1aaae48f22f0d7ca8d9c2f127e7 /alembic/ddl
parent42b109c414aca7b1cf9069c1e1168a20dea3b343 (diff)
downloadalembic-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.py9
-rw-r--r--alembic/ddl/sqlite.py9
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):