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_7b1~92 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e023b16653b0a2e355a1858d57ff01d38ab05dc;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 f8421c26ce..6491cf7419 100644 --- a/CHANGES +++ b/CHANGES @@ -173,6 +173,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 de880171fb..b9f6e0b3e3 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 ce708936b7..532a93ed09 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'