Commits

Mike Bayer  committed f41a0c7

- 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.

  • Participants
  • Parent commits f5e6e5d
  • Branches rel_0_4

Comments (0)

Files changed (3)

 
       [ticket:1090]
 
+    - 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
 =====

File lib/sqlalchemy/databases/sqlite.py

         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"
     sqltypes.CHAR: SLChar,
     sqltypes.Date: SLDate,
     sqltypes.DateTime: SLDateTime,
-    sqltypes.Float: SLNumeric,
+    sqltypes.Float: SLFloat,
     sqltypes.Integer: SLInteger,
     sqltypes.NCHAR: SLChar,
     sqltypes.Numeric: SLNumeric,

File test/sql/testtypes.py

                           }
 
         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'))