]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed oracle 'use_ansi'-via-engine-url handling, added support for 'mode=sysdba...
authorJason Kirtland <jek@discorporate.us>
Wed, 10 Oct 2007 18:49:36 +0000 (18:49 +0000)
committerJason Kirtland <jek@discorporate.us>
Wed, 10 Oct 2007 18:49:36 +0000 (18:49 +0000)
lib/sqlalchemy/databases/oracle.py

index 848a68ff3527af9da94bfff6ee05bbb3efcdc5cc..2c5eacdbdeb1249ed3287bfd7a76a41a55a78a41 100644 (file)
@@ -272,6 +272,13 @@ class OracleDialect(default.DefaultDialect):
     dbapi = classmethod(dbapi)
     
     def create_connect_args(self, url):
+        dialect_opts = dict(url.query)
+        for opt in ('use_ansi', 'auto_setinputsizes', 'auto_convert_lobs',
+                    'threaded', 'allow_twophase'):
+            if opt in dialect_opts:
+                util.coerce_kw_type(dialect_opts, opt, bool)
+                setattr(self, opt, dialect_opts[opt])
+
         if url.database:
             # if we have a database, then we have a remote host
             port = url.port
@@ -279,19 +286,30 @@ class OracleDialect(default.DefaultDialect):
                 port = int(port)
             else:
                 port = 1521
-            dsn = self.dbapi.makedsn(url.host,port,url.database)
+            dsn = self.dbapi.makedsn(url.host, port, url.database)
         else:
             # we have a local tnsname
             dsn = url.host
+
         opts = dict(
             user=url.username,
             password=url.password,
-            dsn = dsn,
-            threaded = self.threaded,
-            twophase = self.allow_twophase,
+            dsn=dsn,
+            threaded=self.threaded,
+            twophase=self.allow_twophase,
             )
-        opts.update(url.query)
-        util.coerce_kw_type(opts, 'use_ansi', bool)
+        if 'mode' in url.query:
+            opts['mode'] = url.query['mode']
+            if isinstance(opts['mode'], basestring):
+                mode = opts['mode'].upper()
+                if mode == 'SYSDBA':
+                    opts['mode'] = self.dbapi.SYSDBA
+                elif mode == 'SYSOPER':
+                    opts['mode'] = self.dbapi.SYSOPER
+                else:
+                    util.coerce_kw_type(opts, 'mode', int)
+        # Can't set 'handle' or 'pool' via URL query args, use connect_args
+
         return ([], opts)
 
     def type_descriptor(self, typeobj):