From: Mike Bayer Date: Wed, 2 Jul 2008 18:29:36 +0000 (+0000) Subject: merge r4889, SQLite Float type, from 0.4 branch X-Git-Tag: rel_0_5beta2~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f3a9acc7e2b572a3546b7341b695afd0134b9fc0;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git merge r4889, SQLite Float type, from 0.4 branch --- diff --git a/CHANGES b/CHANGES index 13ac302a15..5a193fbb3f 100644 --- a/CHANGES +++ b/CHANGES @@ -189,6 +189,11 @@ CHANGES that row request (so BufferedColumnRow is still needed, but less so). [ticket:1062] +- sqlite + - add SLFloat type, which matches the SQLite REAL + type affinity. Previously, only SLNumeric was provided + which fulfills NUMERIC affinity, but that's not the + same as REAL. 0.4.6 ===== diff --git a/lib/sqlalchemy/databases/sqlite.py b/lib/sqlalchemy/databases/sqlite.py index 4f1fa9da5b..bbfb99d65a 100644 --- a/lib/sqlalchemy/databases/sqlite.py +++ b/lib/sqlalchemy/databases/sqlite.py @@ -32,6 +32,19 @@ class SLNumeric(sqltypes.Numeric): else: return "NUMERIC(%(precision)s, %(length)s)" % {'precision': self.precision, 'length' : self.length} +class SLFloat(sqltypes.Float): + def bind_processor(self, dialect): + type_ = self.asdecimal and str or float + def process(value): + if value is not None: + return type_(value) + else: + return value + return process + + def get_col_spec(self): + return "FLOAT" + class SLInteger(sqltypes.Integer): def get_col_spec(self): return "INTEGER" @@ -153,7 +166,7 @@ colspecs = { sqltypes.CHAR: SLChar, sqltypes.Date: SLDate, sqltypes.DateTime: SLDateTime, - sqltypes.Float: SLNumeric, + sqltypes.Float: SLFloat, sqltypes.Integer: SLInteger, sqltypes.NCHAR: SLChar, sqltypes.Numeric: SLNumeric, diff --git a/test/sql/testtypes.py b/test/sql/testtypes.py index 56bd614996..9694d36163 100644 --- a/test/sql/testtypes.py +++ b/test/sql/testtypes.py @@ -263,9 +263,12 @@ class ColumnsTest(TestBase, AssertsExecutionResults): } db = testing.db - if testing.against('sqlite', 'oracle'): + if testing.against('oracle'): expectedResults['float_column'] = 'float_column NUMERIC(25, 2)' + if testing.against('sqlite'): + expectedResults['float_column'] = 'float_column FLOAT' + if testing.against('maxdb'): expectedResults['numeric_column'] = ( expectedResults['numeric_column'].replace('NUMERIC', 'FIXED'))