from .base import alter_table
from ..autogenerate import compare
from ..util.sqla_compat import _is_type_bound, sqla_100
+import re
class MySQLImpl(DefaultImpl):
not rendered_metadata_default and \
rendered_inspector_default == "'0'":
return False
+ elif rendered_inspector_default and rendered_metadata_default:
+ # adjust for "function()" vs. "FUNCTION"
+ return (
+ re.sub(
+ r'(.*)(\(\))?$', '\1',
+ rendered_inspector_default.lower()) !=
+ re.sub(
+ r'(.*)(\(\))?$', '\1',
+ rendered_metadata_default.lower())
+ )
else:
return rendered_inspector_default != rendered_metadata_default
return dialect.ddl_compiler(dialect, None)._prepared_index_name(idx)
else:
return idx.name
+
+
+def _is_mariadb(mysql_dialect):
+ return 'MariaDB' in mysql_dialect.server_version_info
+
+
+def _mariadb_normalized_version_info(mysql_dialect):
+ if len(mysql_dialect.server_version_info) > 5:
+ return mysql_dialect.server_version_info[3:]
+ else:
+ return mysql_dialect.server_version_info
--- /dev/null
+.. change::
+ :tags: bug, mysql
+ :tickets: 455
+
+ Fixed bug where server default comparison of CURRENT_TIMESTAMP would fail
+ on MariaDB 10.2 due to a change in how the function is
+ represented by the database during reflection.
from alembic.testing.requirements import SuiteRequirements
from alembic.testing import exclusions
from alembic import util
+from alembic.util import sqla_compat
class DefaultRequirements(SuiteRequirements):
def integer_subtype_comparisons(self):
"""if a compare of Integer and BigInteger is supported yet."""
return exclusions.skip_if(["oracle"], "not supported by alembic impl")
+
+ def _mariadb_102(self, config):
+ return exclusions.against(config, "mysql") and \
+ sqla_compat._is_mariadb(config.db.dialect) and \
+ sqla_compat._mariadb_normalized_version_info(
+ config.db.dialect) > (10, 2)
+
+ def _mysql_not_mariadb_102(self, config):
+ return exclusions.against(config, "mysql") and (
+ not sqla_compat._is_mariadb(config.db.dialect) or
+ sqla_compat._mariadb_normalized_version_info(
+ config.db.dialect) < (10, 2)
+ )
def test_create_drop_index(self):
super(BatchRoundTripMySQLTest, self).test_create_drop_index()
+ @exclusions.fails_if(config.requirements._mariadb_102)
+ def test_rename_column_boolean(self):
+ super(BatchRoundTripMySQLTest, self).test_rename_column_boolean()
+
class BatchRoundTripPostgresqlTest(BatchRoundTripTest):
__only_on__ = "postgresql"