diff options
| -rw-r--r-- | CHANGES | 3 | ||||
| -rw-r--r-- | lib/sqlalchemy/databases/mssql.py | 9 | ||||
| -rwxr-xr-x | test/dialect/mssql.py | 34 |
3 files changed, 45 insertions, 1 deletions
@@ -14,6 +14,9 @@ CHANGES binary expression need to be translated to use the IN and NOT IN syntax. + - Fixed E Notation issue that prevented the ability to + insert decimal values less than 1E-6. [ticket:1216] + 0.5.0rc3 ======== - features diff --git a/lib/sqlalchemy/databases/mssql.py b/lib/sqlalchemy/databases/mssql.py index 329109828..73c913788 100644 --- a/lib/sqlalchemy/databases/mssql.py +++ b/lib/sqlalchemy/databases/mssql.py @@ -69,7 +69,14 @@ class MSNumeric(sqltypes.Numeric): # Not sure that this exception is needed return value else: - return str(value) + if value._exp < 6: + value = ((value < 0 and '-' or '') + + '0.' + + '0' * -(value._exp+1) + + value._int) + return value + else: + return str(value) return process def get_col_spec(self): diff --git a/test/dialect/mssql.py b/test/dialect/mssql.py index 26fc75243..1927de3f3 100755 --- a/test/dialect/mssql.py +++ b/test/dialect/mssql.py @@ -366,5 +366,39 @@ class ParseConnectTest(TestBase, AssertsCompiledSQL): connection = dialect.create_connect_args(u) self.assertEquals([['DRIVER={SQL Server};Server=hostspec;Database=database;UID=username;PWD=password;foo=bar;LANGUAGE=us_english'], {}], connection) +class TypesTest(TestBase): + __only_on__ = 'mssql' + + def setUpAll(self): + global numeric_table, metadata + metadata = MetaData(testing.db) + numeric_table = Table('numeric_table', metadata, + Column('id', Integer, Sequence('numeric_id_seq', optional=True), primary_key=True), + Column('numericcol', Numeric(asdecimal=False)) + ) + metadata.create_all() + + def tearDownAll(self): + metadata.drop_all() + + def tearDown(self): + numeric_table.delete().execute() + + def test_decimal_e_notation(self): + from decimal import Decimal + + try: + numeric_table.insert().execute(numericcol=Decimal('4.1')) + numeric_table.insert().execute(numericcol=Decimal('1E-1')) + numeric_table.insert().execute(numericcol=Decimal('1E-2')) + numeric_table.insert().execute(numericcol=Decimal('1E-3')) + numeric_table.insert().execute(numericcol=Decimal('1E-4')) + numeric_table.insert().execute(numericcol=Decimal('1E-5')) + numeric_table.insert().execute(numericcol=Decimal('1E-6')) + numeric_table.insert().execute(numericcol=Decimal('1E-7')) + numeric_table.insert().execute(numericcol=Decimal('1E-8')) + except: + assert False + if __name__ == "__main__": testenv.main() |
