summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-03-07 12:36:35 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2013-03-07 12:36:35 -0500
commita98bb5f0cd5d7ef51dbf0f04cc2ba1971768691f (patch)
treeb6a1dea1efe8f521500fe6c2e86c1099bcb8166e /lib/sqlalchemy
parent029b79052cae9a74c9b4dceea92d8ec00595f175 (diff)
parent50cc82b7966f70aeb8c21d881be4ca2b3327f7bf (diff)
downloadsqlalchemy-a98bb5f0cd5d7ef51dbf0f04cc2ba1971768691f.tar.gz
Merged in nakagami/sqlalchemy/cymysql (pull request #42)
cymysql support
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/dialects/mysql/__init__.py2
-rw-r--r--lib/sqlalchemy/dialects/mysql/cymysql.py72
-rw-r--r--lib/sqlalchemy/testing/engines.py2
3 files changed, 74 insertions, 2 deletions
diff --git a/lib/sqlalchemy/dialects/mysql/__init__.py b/lib/sqlalchemy/dialects/mysql/__init__.py
index 1f7046410..2bb636ff3 100644
--- a/lib/sqlalchemy/dialects/mysql/__init__.py
+++ b/lib/sqlalchemy/dialects/mysql/__init__.py
@@ -6,7 +6,7 @@
from . import base, mysqldb, oursql, \
pyodbc, zxjdbc, mysqlconnector, pymysql,\
- gaerdbms
+ gaerdbms, cymysql
# default dialect
base.dialect = mysqldb.dialect
diff --git a/lib/sqlalchemy/dialects/mysql/cymysql.py b/lib/sqlalchemy/dialects/mysql/cymysql.py
new file mode 100644
index 000000000..d9b43869c
--- /dev/null
+++ b/lib/sqlalchemy/dialects/mysql/cymysql.py
@@ -0,0 +1,72 @@
+# mysql/cymysql.py
+# Copyright (C) 2005-2013 the SQLAlchemy authors and contributors <see AUTHORS file>
+#
+# This module is part of SQLAlchemy and is released under
+# the MIT License: http://www.opensource.org/licenses/mit-license.php
+
+"""
+
+.. dialect:: mysql+cymysql
+ :name: CyMySQL
+ :dbapi: cymysql
+ :connectstring: mysql+cymysql://<username>:<password>@<host>/<dbname>[?<options>]
+ :url: https://github.com/nakagami/CyMySQL
+
+"""
+
+from .mysqldb import MySQLDialect_mysqldb
+from .base import (BIT, MySQLDialect)
+from ... import util
+
+class _cymysqlBIT(BIT):
+ def result_processor(self, dialect, coltype):
+ """Convert a MySQL's 64 bit, variable length binary string to a long.
+ """
+
+ def process(value):
+ if value is not None:
+ # Py2K
+ v = 0L
+ for i in map(ord, value):
+ v = v << 8 | i
+ # end Py2K
+ # Py3K
+ #v = 0
+ #for i in value:
+ # v = v << 8 | i
+ return v
+ return value
+ return process
+
+
+class MySQLDialect_cymysql(MySQLDialect_mysqldb):
+ driver = 'cymysql'
+
+ description_encoding = None
+
+ colspecs = util.update_copy(
+ MySQLDialect.colspecs,
+ {
+ BIT: _cymysqlBIT,
+ }
+ )
+
+ @classmethod
+ def dbapi(cls):
+ return __import__('cymysql')
+
+ def _extract_error_code(self, exception):
+ return exception.errno
+
+ def is_disconnect(self, e, connection, cursor):
+ if isinstance(e, self.dbapi.OperationalError):
+ return self._extract_error_code(e) in \
+ (2006, 2013, 2014, 2045, 2055)
+ elif isinstance(e, self.dbapi.InterfaceError):
+ # if underlying connection is closed,
+ # this is the error you get
+ return True
+ else:
+ return False
+
+dialect = MySQLDialect_cymysql
diff --git a/lib/sqlalchemy/testing/engines.py b/lib/sqlalchemy/testing/engines.py
index 20bcf0317..26f561016 100644
--- a/lib/sqlalchemy/testing/engines.py
+++ b/lib/sqlalchemy/testing/engines.py
@@ -229,7 +229,7 @@ def utf8_engine(url=None, options=None):
from sqlalchemy.engine import url as engine_url
if config.db.dialect.name == 'mysql' and \
- config.db.driver in ['mysqldb', 'pymysql']:
+ config.db.driver in ['mysqldb', 'pymysql', 'cymysql']:
# note 1.2.1.gamma.6 or greater of MySQLdb
# needed here
url = url or config.db_url