From 4798fd947f479081e108360e427aed9f18f860eb Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 27 Dec 2013 13:16:48 -0500 Subject: [PATCH] - The "asdecimal" flag used with the :class:`.Float` type will now work with Firebird dialects; previously the decimal conversion was not occurring. - scale back some firebird FP numeric tests --- doc/build/changelog/changelog_08.rst | 8 ++++++++ lib/sqlalchemy/dialects/firebird/kinterbasdb.py | 9 ++++++++- test/requirements.py | 14 ++++++++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index 0f3737d534..5dd7ca9274 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -11,6 +11,14 @@ .. changelog:: :version: 0.8.5 + .. change:: + :tags: bug, firebird + :versions: 0.9.0b2 + + The "asdecimal" flag used with the :class:`.Float` type will now + work with Firebird dialects; previously the decimal conversion was + not occurring. + .. change:: :tags: bug, mssql, pymssql :versions: 0.9.0b2 diff --git a/lib/sqlalchemy/dialects/firebird/kinterbasdb.py b/lib/sqlalchemy/dialects/firebird/kinterbasdb.py index c8d8e986f5..4b083deeb1 100644 --- a/lib/sqlalchemy/dialects/firebird/kinterbasdb.py +++ b/lib/sqlalchemy/dialects/firebird/kinterbasdb.py @@ -42,7 +42,7 @@ from re import match import decimal -class _FBNumeric_kinterbasdb(sqltypes.Numeric): +class _kinterbasdb_numeric(object): def bind_processor(self, dialect): def process(value): if isinstance(value, decimal.Decimal): @@ -51,6 +51,12 @@ class _FBNumeric_kinterbasdb(sqltypes.Numeric): return value return process +class _FBNumeric_kinterbasdb(_kinterbasdb_numeric, sqltypes.Numeric): + pass + +class _FBFloat_kinterbasdb(_kinterbasdb_numeric, sqltypes.Float): + pass + class FBExecutionContext_kinterbasdb(FBExecutionContext): @property @@ -74,6 +80,7 @@ class FBDialect_kinterbasdb(FBDialect): FBDialect.colspecs, { sqltypes.Numeric: _FBNumeric_kinterbasdb, + sqltypes.Float: _FBFloat_kinterbasdb, } ) diff --git a/test/requirements.py b/test/requirements.py index f7b53d8dfe..b90591a802 100644 --- a/test/requirements.py +++ b/test/requirements.py @@ -557,11 +557,21 @@ class DefaultRequirements(SuiteRequirements): """target backend will return native floating point numbers with at least seven decimal places when using the generic Float type.""" - return fails_if('mysql', 'mysql FLOAT type only returns 4 decimals') + return fails_if([ + ('mysql', None, None, + 'mysql FLOAT type only returns 4 decimals'), + ('firebird', None, None, + "firebird FLOAT type isn't high precision"), + ]) @property def floats_to_four_decimals(self): - return fails_if("mysql+oursql", "Floating point error") + return fails_if([ + ("mysql+oursql", None, None, "Floating point error"), + ("firebird", None, None, + "Firebird still has FP inaccuracy even " + "with only four decimal places") + ]) @property def python2(self): -- 2.47.3