From c55023641d390b2b09601b10dbc5663e4bd5a466 Mon Sep 17 00:00:00 2001 From: Hannes Hansen Date: Thu, 23 May 2019 16:27:21 -0400 Subject: MYSQL: added support for drop check/constraint Added support for DROP CHECK constraint which is required by MySQL 8.0.16 to drop a CHECK constraint; MariaDB supports plain DROP CONSTRAINT. The logic distinguishes between the two syntaxes by checking the server version string for MariaDB presence. Alembic migrations has already worked around this issue by implementing its own DROP for MySQL / MariaDB CHECK constraints, however this change implements it straight in Core so that its available for general use. Pull request courtesy Hannes Hansen. Fixes: #4650 Closes: #4659 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4659 Pull-request-sha: 5b654a55e23c2ca498ca3b1cae4f53859e93e8f7 Change-Id: I967710f890722f11cf1f40406adbb17464d16194 --- lib/sqlalchemy/dialects/mysql/base.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy') diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index 9cae3c689..ad5ab288c 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -1703,6 +1703,12 @@ class MySQLDDLCompiler(compiler.DDLCompiler): elif isinstance(constraint, sa_schema.UniqueConstraint): qual = "INDEX " const = self.preparer.format_constraint(constraint) + elif isinstance(constraint, sa_schema.CheckConstraint): + if self.dialect._is_mariadb: + qual = "CONSTRAINT " + else: + qual = "CHECK " + const = self.preparer.format_constraint(constraint) else: qual = "" const = self.preparer.format_constraint(constraint) @@ -2397,11 +2403,13 @@ class MySQLDialect(default.DefaultDialect): @property def _is_mariadb(self): - return "MariaDB" in self.server_version_info + return ( + self.server_version_info and "MariaDB" in self.server_version_info + ) @property def _is_mysql(self): - return "MariaDB" not in self.server_version_info + return not self._is_mariadb @property def _is_mariadb_102(self): -- cgit v1.2.1