diff options
| author | Philip Jenvey <pjenvey@underboss.org> | 2009-08-09 00:56:52 +0000 |
|---|---|---|
| committer | Philip Jenvey <pjenvey@underboss.org> | 2009-08-09 00:56:52 +0000 |
| commit | a53d4e2ab48a003a957ba374c65ea999dcd962e4 (patch) | |
| tree | 5fe59c06d9895a81a7682262ec4e02112ba8194d /lib/sqlalchemy | |
| parent | f0b848c86f62ab457fc3e2aba3d161d4334d861d (diff) | |
| download | sqlalchemy-a53d4e2ab48a003a957ba374c65ea999dcd962e4.tar.gz | |
o oracle+zxjdbc type handling additions
o avoid returning tests on oracle+zxjdbc for now
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/dialects/oracle/zxjdbc.py | 61 | ||||
| -rw-r--r-- | lib/sqlalchemy/test/requires.py | 1 |
2 files changed, 59 insertions, 3 deletions
diff --git a/lib/sqlalchemy/dialects/oracle/zxjdbc.py b/lib/sqlalchemy/dialects/oracle/zxjdbc.py index a0ad088b2..0956d7ab6 100644 --- a/lib/sqlalchemy/dialects/oracle/zxjdbc.py +++ b/lib/sqlalchemy/dialects/oracle/zxjdbc.py @@ -1,14 +1,69 @@ """Support for the Oracle database via the zxjdbc JDBC connector.""" +import decimal import re +try: + from com.ziclix.python.sql.handler import OracleDataHandler +except ImportError: + OracleDataHandler = None + +from sqlalchemy import types as sqltypes, util from sqlalchemy.connectors.zxJDBC import ZxJDBCConnector from sqlalchemy.dialects.oracle.base import OracleDialect +from sqlalchemy.engine.default import DefaultExecutionContext -class Oracle_jdbc(ZxJDBCConnector, OracleDialect): +class _JDBCDate(sqltypes.Date): + + def result_processor(self, dialect): + def process(value): + if value is None: + return None + else: + return value.date() + return process + + +class _JDBCNumeric(sqltypes.Numeric): + + def result_processor(self, dialect): + if self.asdecimal: + return None + else: + def process(value): + if isinstance(value, decimal.Decimal): + return float(value) + else: + return value + return process + + +class Oracle_jdbcExecutionContext(DefaultExecutionContext): + def create_cursor(self): + cursor = self._connection.connection.cursor() + cursor.cursor.datahandler = OracleDataHandler(cursor.cursor.datahandler) + return cursor + + +class Oracle_jdbc(ZxJDBCConnector, OracleDialect): + execution_ctx_cls = Oracle_jdbcExecutionContext jdbc_db_name = 'oracle' jdbc_driver_name = 'oracle.jdbc.driver.OracleDriver' + implicit_returning = False + + colspecs = util.update_copy( + OracleDialect.colspecs, + { + sqltypes.Date : _JDBCDate, + sqltypes.Numeric: _JDBCNumeric + } + ) + + def initialize(self, connection): + super(Oracle_jdbc, self).initialize(connection) + self.implicit_returning = False + def create_connect_args(self, url): hostname = url.host port = url.port or '1521' @@ -16,9 +71,9 @@ class Oracle_jdbc(ZxJDBCConnector, OracleDialect): jdbc_url = 'jdbc:oracle:thin:@%s:%s:%s' % (hostname, port, dbname) return [[jdbc_url, url.username, url.password, self.jdbc_driver_name], self._driver_kwargs()] - + def _get_server_version_info(self, connection): version = re.search(r'Release ([\d\.]+)', connection.connection.dbversion).group(1) return tuple(int(x) for x in version.split('.')) - + dialect = Oracle_jdbc diff --git a/lib/sqlalchemy/test/requires.py b/lib/sqlalchemy/test/requires.py index f3f4ec191..c1f8d3168 100644 --- a/lib/sqlalchemy/test/requires.py +++ b/lib/sqlalchemy/test/requires.py @@ -140,6 +140,7 @@ def returning(fn): no_support('maxdb', 'not supported by database'), no_support('sybase', 'not supported by database'), no_support('informix', 'not supported by database'), + no_support('oracle+zxjdbc', 'FIXME: tricky; currently broken'), ) def two_phase_transactions(fn): |
