summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorRobert Leftwich <rtl@pobox.com>2005-12-01 12:51:38 +0000
committerRobert Leftwich <rtl@pobox.com>2005-12-01 12:51:38 +0000
commit9ec6a9b8e336caf6ef79451f1154f40fc5e771a1 (patch)
tree8302755a21f48ae8af5845c281b21a8d95b79a46 /lib/sqlalchemy
parent2a1098f831a0f9b3f9a01fa5cd2a46789b533a61 (diff)
downloadsqlalchemy-9ec6a9b8e336caf6ef79451f1154f40fc5e771a1.tar.gz
Added float type to support real/double precision/float8/etc sql data types. Added columns.py as unit test. Modified sqlite.py, postgres.py and mysql.py to use the new type where appropriate (note -Oracle is unchanged at present).
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/databases/mysql.py5
-rw-r--r--lib/sqlalchemy/databases/postgres.py9
-rw-r--r--lib/sqlalchemy/databases/sqlite.py2
-rw-r--r--lib/sqlalchemy/types.py12
4 files changed, 25 insertions, 3 deletions
diff --git a/lib/sqlalchemy/databases/mysql.py b/lib/sqlalchemy/databases/mysql.py
index 45d85187a..429ffc0fd 100644
--- a/lib/sqlalchemy/databases/mysql.py
+++ b/lib/sqlalchemy/databases/mysql.py
@@ -33,6 +33,9 @@ except:
class MSNumeric(sqltypes.Numeric):
def get_col_spec(self):
return "NUMERIC(%(precision)s, %(length)s)" % {'precision': self.precision, 'length' : self.length}
+class MSFloat(sqltypes.Float):
+ def get_col_spec(self):
+ return "FLOAT(%(precision)s)" % {'precision': self.precision}
class MSInteger(sqltypes.Integer):
def get_col_spec(self):
return "INTEGER"
@@ -58,6 +61,7 @@ class MSBoolean(sqltypes.Boolean):
colspecs = {
sqltypes.Integer : MSInteger,
sqltypes.Numeric : MSNumeric,
+ sqltypes.Float : MSFloat,
sqltypes.DateTime : MSDateTime,
sqltypes.String : MSString,
sqltypes.Binary : MSBinary,
@@ -72,6 +76,7 @@ ischema_names = {
'char' : MSChar,
'text' : MSText,
'decimal' : MSNumeric,
+ 'float' : MSFloat,
'timestamp' : MSDateTime,
'binary' : MSBinary,
}
diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py
index c8e742fe4..75b9e1aee 100644
--- a/lib/sqlalchemy/databases/postgres.py
+++ b/lib/sqlalchemy/databases/postgres.py
@@ -36,6 +36,9 @@ except:
class PGNumeric(sqltypes.Numeric):
def get_col_spec(self):
return "NUMERIC(%(precision)s, %(length)s)" % {'precision': self.precision, 'length' : self.length}
+class PGFloat(sqltypes.Float):
+ def get_col_spec(self):
+ return "FLOAT(%(precision)s)" % {'precision': self.precision}
class PGInteger(sqltypes.Integer):
def get_col_spec(self):
return "INTEGER"
@@ -70,6 +73,7 @@ class PGBoolean(sqltypes.Boolean):
pg2_colspecs = {
sqltypes.Integer : PGInteger,
sqltypes.Numeric : PGNumeric,
+ sqltypes.Float : PGFloat,
sqltypes.DateTime : PG2DateTime,
sqltypes.String : PGString,
sqltypes.Binary : PGBinary,
@@ -82,12 +86,17 @@ pg1_colspecs[sqltypes.DateTime] = PG1DateTime
pg2_ischema_names = {
'integer' : PGInteger,
+ 'bigint' : PGInteger,
'character varying' : PGString,
'character' : PGChar,
'text' : PGText,
'numeric' : PGNumeric,
+ 'float' : PGFloat,
+ 'real' : PGFloat,
+ 'double precision' : PGFloat,
'timestamp without time zone' : PG2DateTime,
'bytea' : PGBinary,
+ 'boolean' : PGBoolean,
}
pg1_ischema_names = pg2_ischema_names.copy()
pg1_ischema_names['timestamp without time zone'] = PG1DateTime
diff --git a/lib/sqlalchemy/databases/sqlite.py b/lib/sqlalchemy/databases/sqlite.py
index 1a00c555b..845efdf33 100644
--- a/lib/sqlalchemy/databases/sqlite.py
+++ b/lib/sqlalchemy/databases/sqlite.py
@@ -68,6 +68,7 @@ class SLBoolean(sqltypes.Boolean):
colspecs = {
sqltypes.Integer : SLInteger,
sqltypes.Numeric : SLNumeric,
+ sqltypes.Float : SLNumeric,
sqltypes.DateTime : SLDateTime,
sqltypes.String : SLString,
sqltypes.Binary : SLBinary,
@@ -82,6 +83,7 @@ pragma_names = {
'CHAR' : SLChar,
'TEXT' : SLText,
'NUMERIC' : SLNumeric,
+ 'FLOAT' : SLNumeric,
'TIMESTAMP' : SLDateTime,
'BLOB' : SLBinary,
}
diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py
index fc29f8056..520e379a2 100644
--- a/lib/sqlalchemy/types.py
+++ b/lib/sqlalchemy/types.py
@@ -17,7 +17,7 @@
__all__ = [ 'TypeEngine', 'TypeDecorator', 'NullTypeEngine',
'INT', 'CHAR', 'VARCHAR', 'TEXT', 'FLOAT', 'DECIMAL',
- 'TIMESTAMP', 'DATETIME', 'CLOB', 'BLOB', 'BOOLEAN', 'String', 'Integer', 'Numeric', 'DateTime', 'Binary', 'Boolean', 'NULLTYPE'
+ 'TIMESTAMP', 'DATETIME', 'CLOB', 'BLOB', 'BOOLEAN', 'String', 'Integer', 'Numeric', 'Float', 'DateTime', 'Binary', 'Boolean', 'NULLTYPE'
]
@@ -89,6 +89,12 @@ class Numeric(NullTypeEngine):
def adapt(self, typeobj):
return typeobj(self.precision, self.length)
+class Float(NullTypeEngine):
+ def __init__(self, precision = 10):
+ self.precision = precision
+ def adapt(self, typeobj):
+ return typeobj(self.precision)
+
class DateTime(NullTypeEngine):
pass
@@ -98,7 +104,7 @@ class Binary(NullTypeEngine):
class Boolean(NullTypeEngine):
pass
-class FLOAT(Numeric):pass
+class FLOAT(Float):pass
class TEXT(String):pass
class DECIMAL(Numeric):pass
class INT(Integer):pass
@@ -111,4 +117,4 @@ class CHAR(String):pass
class BLOB(Binary): pass
class BOOLEAN(Boolean): pass
-NULLTYPE = NullTypeEngine() \ No newline at end of file
+NULLTYPE = NullTypeEngine()