From 5b654a55e23c2ca498ca3b1cae4f53859e93e8f7 Mon Sep 17 00:00:00 2001 From: Hannes Hansen Date: Fri, 3 May 2019 17:07:42 +0200 Subject: [PATCH] MYSQL: added support for drop check/constraint; Fixes: #4650 --- lib/sqlalchemy/dialects/mysql/base.py | 8 ++++++- test/dialect/mysql/test_compiler.py | 30 +++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index 9d83541ae4..b8f915a68e 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -1693,6 +1693,11 @@ class MySQLDDLCompiler(compiler.DDLCompiler): elif isinstance(constraint, sa_schema.UniqueConstraint): qual = "INDEX " const = self.preparer.format_constraint(constraint) + elif isinstance(constraint, sa_schema.CheckConstraint): + qual = "CHECK " + if self.dialect._is_mariadb: + qual = "CONSTRAINT " + const = self.preparer.format_constraint(constraint) else: qual = "" const = self.preparer.format_constraint(constraint) @@ -2387,7 +2392,8 @@ 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): diff --git a/test/dialect/mysql/test_compiler.py b/test/dialect/mysql/test_compiler.py index 54767a913b..60e11ca29f 100644 --- a/test/dialect/mysql/test_compiler.py +++ b/test/dialect/mysql/test_compiler.py @@ -5,6 +5,7 @@ from sqlalchemy import BOOLEAN from sqlalchemy import Boolean from sqlalchemy import cast from sqlalchemy import CHAR +from sqlalchemy import CheckConstraint from sqlalchemy import CLOB from sqlalchemy import Column from sqlalchemy import DATE @@ -128,6 +129,35 @@ class CompileTest(fixtures.TestBase, AssertsCompiledSQL): "CREATE INDEX test_idx2 ON testtbl (data(5))", ) + def test_drop_constraint_mysql(self): + m = MetaData() + table_name = "testtbl" + constraint_name = "constraint" + constraint = CheckConstraint("data IS NOT NULL", name=constraint_name) + tbl = Table(table_name, m, Column("data", String(255)), constraint) + dialect = mysql.dialect() + self.assert_compile( + schema.DropConstraint(constraint), + "ALTER TABLE %s DROP CHECK `%s`" + % (table_name, constraint_name), + dialect=dialect + ) + + def test_drop_constraint_mariadb(self): + m = MetaData() + table_name = "testtbl" + constraint_name = "constraint" + constraint = CheckConstraint("data IS NOT NULL", name=constraint_name) + tbl = Table(table_name, m, Column("data", String(255)), constraint) + dialect = mysql.dialect() + dialect.server_version_info = (10, 1, 1, "MariaDB") + self.assert_compile( + schema.DropConstraint(constraint), + "ALTER TABLE %s DROP CONSTRAINT `%s`" + % (table_name, constraint_name), + dialect=dialect + ) + def test_create_index_with_length_quoted(self): m = MetaData() tbl = Table( -- 2.47.3