# partially a workaround for SQLAlchemy issue #3023; if the
# column were created without "NOT NULL", MySQL may have added
# an implicit default of '0' which we need to skip
+ # TODO: this is not really covered anymore ?
if metadata_column.type._type_affinity is sqltypes.Integer and \
inspector_column.primary_key and \
not inspector_column.autoincrement and \
not rendered_metadata_default and \
rendered_inspector_default == "'0'":
return False
+ elif inspector_column.type._type_affinity is sqltypes.Integer:
+ rendered_inspector_default = re.sub(
+ r"^'|'$", '', rendered_inspector_default)
+ return rendered_inspector_default != rendered_metadata_default
elif rendered_inspector_default and rendered_metadata_default:
# adjust for "function()" vs. "FUNCTION"
return (
re.sub(
- r'(.*)(\(\))?$', '\1',
+ r'(.*?)(?:\(\))?$', r'\1',
rendered_inspector_default.lower()) !=
re.sub(
- r'(.*)(\(\))?$', '\1',
+ r'(.*?)(?:\(\))?$', r'\1',
rendered_metadata_default.lower())
)
else:
--- /dev/null
+.. change::
+ :tags: bug, autogenerate, mysql
+ :tickets: 455
+
+ The fix for :ticket:`455` in version 0.9.6 involving MySQL server default
+ comparison was entirely non functional, as the test itself was also broken
+ and didn't reveal that it wasn't working. The regular expression to compare
+ server default values like CURRENT_TIMESTAMP to current_timestamp() is
+ repaired.
--- /dev/null
+.. change::
+ :tags: bug, mysql, autogenerate
+ :tickets: 483
+
+ Fixed bug where MySQL server default comparisons were basically not working
+ at all due to incorrect regexp added in :ticket:`455`. Also accommodates
+ for MariaDB 10.2 quoting differences in reporting integer based server
+ defaults.
+
+
+
t1.create(self.bind)
insp = Inspector.from_engine(self.bind)
cols = insp.get_columns(t1.name)
+ refl = Table(t1.name, MetaData())
+ insp.reflecttable(refl, None)
ctx = self.autogen_context['context']
return ctx.impl.compare_server_default(
- None,
+ refl.c[cols[0]['name']],
col,
rendered,
cols[0]['default'])
TIMESTAMP(),
None, "CURRENT_TIMESTAMP",
)
+
+ def test_compare_integer_same(self):
+ self._compare_default_roundtrip(
+ Integer(), "5"
+ )
+
+ def test_compare_integer_diff(self):
+ self._compare_default_roundtrip(
+ Integer(), "5", "7"
+ )
+
+ def test_compare_boolean_same(self):
+ self._compare_default_roundtrip(
+ Boolean(), "1"
+ )
+
+ def test_compare_boolean_diff(self):
+ self._compare_default_roundtrip(
+ Boolean(), "1", "0"
+ )