From: Brad Allen Date: Thu, 18 Mar 2010 20:05:59 +0000 (-0600) Subject: Removed MxNumeric and MxFloat because now the sqlalchemy.types base classes support... X-Git-Tag: rel_0_6beta2~33 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=49627de3d81bd7b60b241740a4792dcf3f0bd1d5;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Removed MxNumeric and MxFloat because now the sqlalchemy.types base classes support dialects having a class attribute of "supports_native_decimal" indicating native Python Demimal support. Adjusted mssql+mxodbc to use the sqlalchemy.types base classes for Float and Numeric instead of using the base mssql dialect's numeric types. --- diff --git a/lib/sqlalchemy/connectors/mxodbc.py b/lib/sqlalchemy/connectors/mxodbc.py index 059931de6d..484c11d499 100644 --- a/lib/sqlalchemy/connectors/mxodbc.py +++ b/lib/sqlalchemy/connectors/mxodbc.py @@ -113,56 +113,3 @@ class MxODBCConnector(Connector): return tuple(version) -class MxNumeric(sqltypes.Numeric): - """ - Handle Numeric types between SQLAlchemy and mxODBC. - """ - def bind_processor(self, dialect): - """ - SQLAlchemy can accept a Python Decimal for bind - variables, so no special bind_processor is needed. - """ - return None - - def result_processor(self, dialect, coltype): - """ - By default, the SQLAlchemy mxODBC connector is - configured to return Decimal values from - Numeric columns. In addition, the SQLAlchemy's - Numeric type is expected to return a Python Numeric, - so by default no action is needed. - - However, if the user specifies asdecimal=False - on a Decimal column, it is expected to return - a Python float. - """ - if self.asdecimal: - return None - else: - return processors.to_float - - -class MxFloat(sqltypes.Float): - """ - Handle Numeric types between SQLAlchemy and mxODBC. - """ - def bind_processor(self, dialect): - """ - SQLAlchemy can accept a Python Decimal for bind - variables, so no special bind_processor is needed. - """ - return None - - def result_processor(self, dialect, coltype): - """ - mxODBC returns Python float values for REAL, FLOAT, and - DOUBLE column types, so if the user specifies 'asdecimal', - SQLAlchemy needs to coerce the value to a Decimal type. - Otherwise, no special action is needed. - """ - if self.asdecimal: - return processors.to_decimal_processor_factory(Decimal) - else: - return None - - diff --git a/lib/sqlalchemy/dialects/mssql/mxodbc.py b/lib/sqlalchemy/dialects/mssql/mxodbc.py index 2ff2f39f74..30d14bf381 100644 --- a/lib/sqlalchemy/dialects/mssql/mxodbc.py +++ b/lib/sqlalchemy/dialects/mssql/mxodbc.py @@ -3,10 +3,11 @@ import sys from sqlalchemy import types as sqltypes from sqlalchemy import util -from sqlalchemy.connectors.mxodbc import MxODBCConnector, MxNumeric, MxFloat +from sqlalchemy.connectors.mxodbc import MxODBCConnector from sqlalchemy.dialects.mssql.pyodbc import MSExecutionContext_pyodbc -from sqlalchemy.dialects.mssql.base import MSExecutionContext, MSDialect, \ - MSSQLCompiler, MSSQLStrictCompiler +from sqlalchemy.dialects.mssql.base import (MSExecutionContext, MSDialect, + MSSQLCompiler, MSSQLStrictCompiler, + _MSDateTime, _MSDate, TIME) class MSExecutionContext_mxodbc(MSExecutionContext_pyodbc): @@ -24,17 +25,14 @@ class MSDialect_mxodbc(MxODBCConnector, MSDialect): # TODO: may want to use this only if FreeTDS is not in use, # since FreeTDS doesn't seem to use native binds. statement_compiler = MSSQLStrictCompiler - execution_ctx_cls = MSExecutionContext_mxodbc - colspecs = util.update_copy( - MSDialect.colspecs, - { - sqltypes.Numeric : MxNumeric, - sqltypes.Float : MxFloat - }, - ) + colspecs = { + #sqltypes.Numeric : _MSNumeric, + sqltypes.DateTime : _MSDateTime, + sqltypes.Date : _MSDate, + sqltypes.Time : TIME, + } - def __init__(self, description_encoding='latin-1', **params): super(MSDialect_mxodbc, self).__init__(**params)