summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/databases/oracle.py
diff options
context:
space:
mode:
authorJason Kirtland <jek@discorporate.us>2007-10-10 18:49:36 +0000
committerJason Kirtland <jek@discorporate.us>2007-10-10 18:49:36 +0000
commitd3fb340bc2a3729ed142b1e3211d018e688aa385 (patch)
treeb8cb3c046a336fe6ce5694892d32d03067b2d6e6 /lib/sqlalchemy/databases/oracle.py
parentba1f5c45ef1d06e83c537bdce69a9d5f79d7d19b (diff)
downloadsqlalchemy-d3fb340bc2a3729ed142b1e3211d018e688aa385.tar.gz
- Fixed oracle 'use_ansi'-via-engine-url handling, added support for 'mode=sysdba' et al.
Diffstat (limited to 'lib/sqlalchemy/databases/oracle.py')
-rw-r--r--lib/sqlalchemy/databases/oracle.py30
1 files changed, 24 insertions, 6 deletions
diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py
index 848a68ff3..2c5eacdbd 100644
--- a/lib/sqlalchemy/databases/oracle.py
+++ b/lib/sqlalchemy/databases/oracle.py
@@ -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):