]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
MYSQL: added support for drop check/constraint; Fixes: #4650 4659/head
authorHannes Hansen <hannes.jakob.hansen@cern.ch>
Fri, 3 May 2019 15:07:42 +0000 (17:07 +0200)
committerHannes Hansen <hannes.jakob.hansen@cern.ch>
Thu, 23 May 2019 13:50:03 +0000 (15:50 +0200)
lib/sqlalchemy/dialects/mysql/base.py
test/dialect/mysql/test_compiler.py

index 9d83541ae48d53f7df6080a33e532fda9311211c..b8f915a68e54dc9da4f7ceb2a4812a095c958cfc 100644 (file)
@@ -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):
index 54767a913b835be051f3cec5c4ed7a39254d5254..60e11ca29fd18ee27749f0ca803931c242d502e5 100644 (file)
@@ -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(