]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- MySQL dialect doesn't emit CAST() for MySQL version
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 19 Jun 2010 17:21:19 +0000 (13:21 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 19 Jun 2010 17:21:19 +0000 (13:21 -0400)
detected < 4.0.2.  This allows the unicode
check on connect to proceed. [ticket:1826]

CHANGES
lib/sqlalchemy/dialects/mysql/base.py
test/dialect/test_mysql.py

diff --git a/CHANGES b/CHANGES
index a1013546ee0ae29dd7f1a9762b1000012ea2e311..8d1b3207db63df56d11e2065dbc22df7214ff7f9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -77,6 +77,11 @@ CHANGES
   - Column.copy() takes along the "unique" attribute
     among others, fixes [ticket:1829] regarding declarative
     mixins
+
+- mysql
+  - MySQL dialect doesn't emit CAST() for MySQL version 
+    detected < 4.0.2.  This allows the unicode
+    check on connect to proceed. [ticket:1826]
     
 - firebird
   - Fixed incorrect signature in do_execute(), error 
index 179e0c76d89c17e4f64210e6150867b437a0d25e..c4af013fc29d09a53501d1d976781e9f84b8202d 100644 (file)
@@ -1187,6 +1187,9 @@ class MySQLCompiler(compiler.SQLCompiler):
 
     def visit_cast(self, cast, **kwargs):
         # No cast until 4, no decimals until 5.
+        if not self.dialect._supports_cast:
+            return self.process(cast.clause)
+        
         type_ = self.process(cast.typeclause)
         if type_ is None:
             return self.process(cast.clause)
@@ -1761,8 +1764,14 @@ class MySQLDialect(default.DefaultDialect):
         if self._server_ansiquotes:
             # if ansiquotes == True, build a new IdentifierPreparer
             # with the new setting
-            self.identifier_preparer = self.preparer(self, server_ansiquotes=self._server_ansiquotes)
+            self.identifier_preparer = self.preparer(self,
+                                                    server_ansiquotes=self._server_ansiquotes)
 
+    @property
+    def _supports_cast(self):
+        return self.server_version_info is None or \
+                    self.server_version_info >= (4, 0, 2)
+        
     @reflection.cache
     def get_schema_names(self, connection, **kw):
         rp = connection.execute("SHOW schemas")
index f61af423819a35d37eef75bedabfdc27581039a1..f41f06209597a749e8551c2effed601aa341cd18 100644 (file)
@@ -1162,7 +1162,20 @@ class SQLTest(TestBase, AssertsCompiledSQL):
 
         for type_, expected in specs:
             self.assert_compile(cast(t.c.col, type_), expected)
-
+    
+    def test_no_cast_pre_4(self):
+        self.assert_compile(
+                    cast(Column('foo', Integer), String),
+                    "CAST(foo AS CHAR)",
+            )
+        dialect = mysql.dialect()
+        dialect.server_version_info = (3, 2, 3)
+        self.assert_compile(
+                    cast(Column('foo', Integer), String),
+                    "foo",
+                    dialect=dialect
+            )
+        
     def test_extract(self):
         t = sql.table('t', sql.column('col1'))