diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-03-07 12:36:35 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-03-07 12:36:35 -0500 |
| commit | a98bb5f0cd5d7ef51dbf0f04cc2ba1971768691f (patch) | |
| tree | b6a1dea1efe8f521500fe6c2e86c1099bcb8166e /lib/sqlalchemy | |
| parent | 029b79052cae9a74c9b4dceea92d8ec00595f175 (diff) | |
| parent | 50cc82b7966f70aeb8c21d881be4ca2b3327f7bf (diff) | |
| download | sqlalchemy-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__.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/mysql/cymysql.py | 72 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/engines.py | 2 |
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 |
