From: Mike Bayer Date: Tue, 4 Jan 2011 02:11:12 +0000 (-0500) Subject: - Firebird numeric type now checks for Decimal explicitly, X-Git-Tag: rel_0_6_6~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1eeb91f41e3b94836b8ebc4667d79b61e8d72ebb;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Firebird numeric type now checks for Decimal explicitly, lets float() pass right through, thereby allowing special values such as float('inf'). [ticket:2012] --- diff --git a/CHANGES b/CHANGES index e5192769ca..50bcdce6b4 100644 --- a/CHANGES +++ b/CHANGES @@ -158,6 +158,11 @@ CHANGES when using a non-period-decimal-point NLS_LANG setting. [ticket:1953]. +- firebird + - Firebird numeric type now checks for Decimal explicitly, + lets float() pass right through, thereby allowing + special values such as float('inf'). [ticket:2012] + - declarative - An error is raised if __table_args__ is not in tuple or dict format, and is not None. [ticket:1972] diff --git a/lib/sqlalchemy/dialects/firebird/base.py b/lib/sqlalchemy/dialects/firebird/base.py index 39e19de25a..978f044084 100644 --- a/lib/sqlalchemy/dialects/firebird/base.py +++ b/lib/sqlalchemy/dialects/firebird/base.py @@ -564,7 +564,7 @@ class FBDialect(default.DefaultDialect): else: coltype = BLOB() else: - coltype = coltype(row) + coltype = coltype() # does it have a default value? defvalue = None diff --git a/lib/sqlalchemy/dialects/firebird/kinterbasdb.py b/lib/sqlalchemy/dialects/firebird/kinterbasdb.py index ad8d44262f..73989097be 100644 --- a/lib/sqlalchemy/dialects/firebird/kinterbasdb.py +++ b/lib/sqlalchemy/dialects/firebird/kinterbasdb.py @@ -48,11 +48,12 @@ __ http://kinterbasdb.sourceforge.net/dist_docs/usage.html#special_issue_concurr from sqlalchemy.dialects.firebird.base import FBDialect, \ FBCompiler, FBExecutionContext from sqlalchemy import util, types as sqltypes +from sqlalchemy.util.compat import decimal class _FBNumeric_kinterbasdb(sqltypes.Numeric): def bind_processor(self, dialect): def process(value): - if value is not None: + if isinstance(value, decimal.Decimal): return str(value) else: return value @@ -78,7 +79,7 @@ class FBDialect_kinterbasdb(FBDialect): colspecs = util.update_copy( FBDialect.colspecs, { - sqltypes.Numeric:_FBNumeric_kinterbasdb + sqltypes.Numeric:_FBNumeric_kinterbasdb, } ) diff --git a/test/dialect/test_firebird.py b/test/dialect/test_firebird.py index e1c3108727..e7eb470016 100644 --- a/test/dialect/test_firebird.py +++ b/test/dialect/test_firebird.py @@ -319,6 +319,20 @@ class CompileTest(TestBase, AssertsCompiledSQL): for type_, args, kw, res in columns: self.assert_compile(type_(*args, **kw), res) +class TypesTest(TestBase): + __only_on__ = 'firebird' + + @testing.provide_metadata + def test_infinite_float(self): + t = Table('t', metadata, + Column('data', Float) + ) + metadata.create_all() + t.insert().execute(data=float('inf')) + eq_(t.select().execute().fetchall(), + [(float('inf'),)] + ) + class MiscTest(TestBase): __only_on__ = 'firebird'