summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/databases/firebird.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/databases/firebird.py')
-rw-r--r--lib/sqlalchemy/databases/firebird.py45
1 files changed, 42 insertions, 3 deletions
diff --git a/lib/sqlalchemy/databases/firebird.py b/lib/sqlalchemy/databases/firebird.py
index 22537d7ba..a427c7220 100644
--- a/lib/sqlalchemy/databases/firebird.py
+++ b/lib/sqlalchemy/databases/firebird.py
@@ -5,6 +5,7 @@
# the MIT License: http://www.opensource.org/licenses/mit-license.php
+import datetime
import warnings
from sqlalchemy import util, sql, schema, exceptions, pool
@@ -24,6 +25,29 @@ class FBNumeric(sqltypes.Numeric):
return "NUMERIC(%(precision)s, %(length)s)" % { 'precision': self.precision,
'length' : self.length }
+ def bind_processor(self, dialect):
+ return None
+
+ def result_processor(self, dialect):
+ if self.asdecimal:
+ return None
+ else:
+ def process(value):
+ if isinstance(value, util.decimal_type):
+ return float(value)
+ else:
+ return value
+ return process
+
+
+class FBFloat(sqltypes.Float):
+ def get_col_spec(self):
+ if not self.precision:
+ return "FLOAT"
+ else:
+ return "FLOAT(%(precision)s)" % {'precision': self.precision}
+
+
class FBInteger(sqltypes.Integer):
def get_col_spec(self):
return "INTEGER"
@@ -38,15 +62,29 @@ class FBDateTime(sqltypes.DateTime):
def get_col_spec(self):
return "TIMESTAMP"
+ def bind_processor(self, dialect):
+ def process(value):
+ if value is None or isinstance(value, datetime.datetime):
+ return value
+ else:
+ return datetime.datetime(year=value.year, month=value.month,
+ day=value.day)
+ return process
+
class FBDate(sqltypes.DateTime):
def get_col_spec(self):
return "DATE"
+class FBTime(sqltypes.Time):
+ def get_col_spec(self):
+ return "TIME"
+
+
class FBText(sqltypes.TEXT):
def get_col_spec(self):
- return "BLOB SUB_TYPE 2"
+ return "BLOB SUB_TYPE 1"
class FBString(sqltypes.String):
@@ -61,7 +99,7 @@ class FBChar(sqltypes.CHAR):
class FBBinary(sqltypes.Binary):
def get_col_spec(self):
- return "BLOB SUB_TYPE 1"
+ return "BLOB SUB_TYPE 0"
class FBBoolean(sqltypes.Boolean):
@@ -73,9 +111,10 @@ colspecs = {
sqltypes.Integer : FBInteger,
sqltypes.Smallinteger : FBSmallInteger,
sqltypes.Numeric : FBNumeric,
- sqltypes.Float : FBNumeric,
+ sqltypes.Float : FBFloat,
sqltypes.DateTime : FBDateTime,
sqltypes.Date : FBDate,
+ sqltypes.Time : FBTime,
sqltypes.String : FBString,
sqltypes.Binary : FBBinary,
sqltypes.Boolean : FBBoolean,