]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- datetime fixes: got subsecond TIMESTAMP to work [ticket:604],
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 17 Jun 2007 00:13:31 +0000 (00:13 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 17 Jun 2007 00:13:31 +0000 (00:13 +0000)
added OracleDate which supports types.Date with only year/month/day

CHANGES
lib/sqlalchemy/databases/oracle.py
test/sql/testtypes.py

diff --git a/CHANGES b/CHANGES
index ce3e86c2c087527587e9b8fe87793b95d4e476b9..1662d7624d20b6e7934bac067995fbf5c97b7c3b 100644 (file)
--- a/CHANGES
+++ b/CHANGES
       up ORM decision making [ticket:593]
 - mysql
     - added 'fields' to reserved words [ticket:590]
+- oracle
+    - datetime fixes: got subsecond TIMESTAMP to work [ticket:604],
+      added OracleDate which supports types.Date with only year/month/day
 - sqlite
     - sqlite better handles datetime/date/time objects mixed and matched
       with various Date/Time/DateTime columns
 
     
+>>>>>>> .r2741
 0.3.8
 - engines
     - added detach() to Connection, allows underlying DBAPI connection
index 1cb4a0027a052ad62ec17f498f85ff0bc0843dc9..55695e1ef679b9193014d7559b1c710897d7adfc 100644 (file)
@@ -11,6 +11,7 @@ from sqlalchemy import util, sql, engine, schema, ansisql, exceptions, logging
 from sqlalchemy.engine import default, base
 import sqlalchemy.types as sqltypes
 
+import datetime
 
 
 class OracleNumeric(sqltypes.Numeric):
@@ -28,6 +29,17 @@ class OracleSmallInteger(sqltypes.Smallinteger):
     def get_col_spec(self):
         return "SMALLINT"
 
+class OracleDate(sqltypes.Date):
+    def get_col_spec(self):
+        return "DATE"
+    def convert_bind_param(self, value, dialect):
+        return value
+    def convert_result_value(self, value, dialect):
+        if not isinstance(value, datetime.datetime):
+            return value
+        else:
+            return value.date()
+
 class OracleDateTime(sqltypes.DateTime):
     def get_col_spec(self):
         return "DATE"
@@ -111,7 +123,7 @@ colspecs = {
     sqltypes.Numeric : OracleNumeric,
     sqltypes.Float : OracleNumeric,
     sqltypes.DateTime : OracleDateTime,
-    sqltypes.Date : OracleDateTime,
+    sqltypes.Date : OracleDate,
     sqltypes.String : OracleString,
     sqltypes.Binary : OracleBinary,
     sqltypes.Boolean : OracleBoolean,
@@ -122,7 +134,7 @@ colspecs = {
 
 ischema_names = {
     'VARCHAR2' : OracleString,
-    'DATE' : OracleDateTime,
+    'DATE' : OracleDate,
     'DATETIME' : OracleDateTime,
     'NUMBER' : OracleNumeric,
     'BLOB' : OracleBinary,
index 3d4d4ecce6ba9b8192ca21e27ef56fb3e6e53fa5..4da3760d20d1c45d9bc69c39f45e5359c6227681 100644 (file)
@@ -256,33 +256,18 @@ class DateTest(AssertMixin):
         global users_with_date, insert_data
 
         if db.engine.name == 'oracle':
-            # still trying to get oracle sub-second resolution to work
-            oracle_subsecond = False
-            if oracle_subsecond:
-                import sqlalchemy.databases.oracle as oracle
-                insert_data =  [
-                        [7, 'jack', datetime.datetime(2005, 11, 10, 0, 0), datetime.date(2005,11,10), datetime.datetime(2005, 11, 10, 0, 0, 0, 29384)],
-                        [8, 'roy', datetime.datetime(2005, 11, 10, 11, 52, 35), datetime.date(2005,10,10), datetime.datetime(2006, 5, 10, 15, 32, 47, 6754)],
-                        [9, 'foo', datetime.datetime(2005, 11, 10, 11, 52, 35, 54839), datetime.date(1970,4,1), datetime.datetime(2004, 9, 18, 4, 0, 52, 1043)],
-                        [10, 'colber', None, None, None]
-                ]
-
-                fnames = ['user_id', 'user_name', 'user_datetime', 'user_date', 'user_time']
-
-                collist = [Column('user_id', INT, primary_key = True), Column('user_name', VARCHAR(20)), Column('user_datetime', DateTime),
-               Column('user_date', Date), Column('user_time', oracle.OracleTimestamp)]
-            else:
-                insert_data =  [
-                        [7, 'jack', datetime.datetime(2005, 11, 10, 0, 0), datetime.datetime(2005, 11, 10, 0, 0, 0)],
-                        [8, 'roy', datetime.datetime(2005, 11, 10, 11, 52, 35), datetime.datetime(2006, 5, 10, 15, 32, 47)],
-                        [9, 'foo', datetime.datetime(2005, 11, 10, 11, 52, 35), datetime.datetime(2004, 9, 18, 4, 0, 52)],
-                        [10, 'colber', None, None]
-                ]
-
-                fnames = ['user_id', 'user_name', 'user_datetime', 'user_date', 'user_time']
-
-                collist = [Column('user_id', INT, primary_key = True), Column('user_name', VARCHAR(20)), Column('user_datetime', DateTime),
-               Column('user_date', DateTime)]
+            import sqlalchemy.databases.oracle as oracle
+            insert_data =  [
+                    [7, 'jack', datetime.datetime(2005, 11, 10, 0, 0), datetime.date(2005,11,10), datetime.datetime(2005, 11, 10, 0, 0, 0, 29384)],
+                    [8, 'roy', datetime.datetime(2005, 11, 10, 11, 52, 35), datetime.date(2005,10,10), datetime.datetime(2006, 5, 10, 15, 32, 47, 6754)],
+                    [9, 'foo', datetime.datetime(2006, 11, 10, 11, 52, 35), datetime.date(1970,4,1), datetime.datetime(2004, 9, 18, 4, 0, 52, 1043)],
+                    [10, 'colber', None, None, None]
+             ]
+
+            fnames = ['user_id', 'user_name', 'user_datetime', 'user_date', 'user_time']
+
+            collist = [Column('user_id', INT, primary_key = True), Column('user_name', VARCHAR(20)), Column('user_datetime', DateTime),
+               Column('user_date', Date), Column('user_time', TIMESTAMP)]
         elif db.engine.name == 'mysql' or db.engine.name == 'mssql':
             # these dont really support the TIME type at all
             insert_data =  [
@@ -336,7 +321,7 @@ class DateTest(AssertMixin):
         #print repr(x)
 
     def testdate2(self):
-        t = Table('testdate', testbase.metadata, Column('id', Integer, primary_key=True),
+        t = Table('testdate', testbase.metadata, Column('id', Integer, Sequence('datetest_id_seq', optional=True), primary_key=True),
                 Column('adate', Date), Column('adatetime', DateTime))
         t.create()
         try: