]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- added auto_setinputsizes=False to oracle dialect. if true, all executions will...
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 3 Oct 2006 21:47:48 +0000 (21:47 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 3 Oct 2006 21:47:48 +0000 (21:47 +0000)
- some tweaks to the types unittest for oracle.  oracle types still need lots more work.

lib/sqlalchemy/databases/oracle.py
lib/sqlalchemy/engine/default.py
test/sql/testtypes.py

index 620a5abd6189f8050c3852164927c7569fa0951f..db82e3dea8ef6b46616d937cb922caa50ffe2969 100644 (file)
@@ -132,10 +132,11 @@ def descriptor():
 class OracleExecutionContext(default.DefaultExecutionContext):
     def pre_exec(self, engine, proxy, compiled, parameters):
         super(OracleExecutionContext, self).pre_exec(engine, proxy, compiled, parameters)
-        #self.set_input_sizes(proxy(), parameters)
+        if self.dialect.auto_setinputsizes:
+                self.set_input_sizes(proxy(), parameters)
         
 class OracleDialect(ansisql.ANSIDialect):
-    def __init__(self, use_ansi=True, module=None, threaded=True, **kwargs):
+    def __init__(self, use_ansi=True, auto_setinputsizes=False, module=None, threaded=True, **kwargs):
         self.use_ansi = use_ansi
         self.threaded = threaded
         if module is None:
@@ -143,6 +144,7 @@ class OracleDialect(ansisql.ANSIDialect):
         else:
             self.module = module
         self.supports_timestamp = hasattr(self.module, 'TIMESTAMP' )
+        self.auto_setinputsizes = auto_setinputsizes
         ansisql.ANSIDialect.__init__(self, **kwargs)
 
     def dbapi(self):
index 4a3791c35b5eb70ead9afbf5c214170a299ec169..ea542fe5b772fdbcf91ba03053a201c533ef8e4b 100644 (file)
@@ -174,14 +174,14 @@ class DefaultExecutionContext(base.ExecutionContext):
             plist = [parameters]
         if self.dialect.positional:
             inputsizes = []
-            for params in plist[0]:
+            for params in plist[0:1]:
                 for key in params.positional:
                     typeengine = params.binds[key].type
                     inputsizes.append(typeengine.get_dbapi_type(self.dialect.module))
             cursor.setinputsizes(*inputsizes)
         else:
             inputsizes = {}
-            for params in plist[0]:
+            for params in plist[0:1]:
                 for key in params.keys():
                     typeengine = params.binds[key].type
                     inputsizes[key] = typeengine.get_dbapi_type(self.dialect.module)
index 524834fec5bba91921007ba559bbed8a4fb0d3ff..04602ebf5c9446a640d28235822bc180215092d4 100644 (file)
@@ -182,6 +182,8 @@ class BinaryTest(AssertMixin):
         binary_table.create()
     def tearDownAll(self):
         binary_table.drop()
+
+    @testbase.unsupported('oracle')
     def testbinary(self):
         testobj1 = pickleable.Foo('im foo 1')
         testobj2 = pickleable.Foo('im foo 2')
@@ -211,34 +213,58 @@ class DateTest(AssertMixin):
     def setUpAll(self):
         global users_with_date, insert_data
 
-        insert_data =  [
+        if db.engine.name == 'oracle':
+                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)]
+        elif db.engine.name == 'mysql' or db.engine.name == 'mssql':
+                insert_data =  [
                         [7, 'jack', datetime.datetime(2005, 11, 10, 0, 0), datetime.date(2005,11,10), datetime.time(12,20,2)],
                         [8, 'roy', datetime.datetime(2005, 11, 10, 11, 52, 35), datetime.date(2005,10,10), datetime.time(0,0,0)],
-                        [9, 'foo', datetime.datetime(2005, 11, 10, 11, 52, 35, 54839), datetime.date(1970,4,1), datetime.time(23,59,59,999)],
+                        [9, 'foo', datetime.datetime(2005, 11, 10, 11, 52, 35), datetime.date(1970,4,1), datetime.time(23,59,59,999)],
                         [10, 'colber', None, None, None]
-        ]
+                ]
 
-        fnames = ['user_id', 'user_name', 'user_datetime', 'user_date', 'user_time']
+                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(timezone=False)),
+                collist = [Column('user_id', INT, primary_key = True), Column('user_name', VARCHAR(20)), Column('user_datetime', DateTime(timezone=False)),
                    Column('user_date', Date), Column('user_time', Time)]
-        
-        if db.engine.name == 'mysql' or db.engine.name == 'mssql':
-            # strip microseconds -- not supported by this engine (should be an easier way to detect this)
-            for d in insert_data:
-                if d[2] is not None:
-                    d[2] = d[2].replace(microsecond=0)
-                if d[4] is not None:
-                    d[4] = d[4].replace(microsecond=0)
-        
-        try:
-            db.type_descriptor(types.TIME).get_col_spec()
-        except:
-            # don't test TIME type -- not supported by this engine
-            insert_data = [d[:-1] for d in insert_data]
-            fnames = fnames[:-1]
-            collist = collist[:-1]
+        else:
+                insert_data =  [
+                        [7, 'jack', datetime.datetime(2005, 11, 10, 0, 0), datetime.date(2005,11,10), datetime.time(12,20,2)],
+                        [8, 'roy', datetime.datetime(2005, 11, 10, 11, 52, 35), datetime.date(2005,10,10), datetime.time(0,0,0)],
+                        [9, 'foo', datetime.datetime(2005, 11, 10, 11, 52, 35, 54839), datetime.date(1970,4,1), datetime.time(23,59,59,999)],
+                        [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(timezone=False)),
+                           Column('user_date', Date), Column('user_time', Time)]
         users_with_date = Table('query_users_with_date', db, redefine = True, *collist)
         users_with_date.create()
         insert_dicts = [dict(zip(fnames, d)) for d in insert_data]
@@ -270,6 +296,7 @@ class TimezoneTest(AssertMixin):
     if postgres returns it.  python then will not let you compare a datetime with a tzinfo to a datetime
     that doesnt have one.  this test illustrates two ways to have datetime types with and without timezone
     info. """
+    @testbase.supported('postgres')
     def setUpAll(self):
         global tztable, notztable, metadata
         metadata = BoundMetaData(testbase.db)
@@ -286,6 +313,7 @@ class TimezoneTest(AssertMixin):
             Column("name", String(20)),
         )
         metadata.create_all()
+    @testbase.supported('postgres')
     def tearDownAll(self):
         metadata.drop_all()