diff options
author | Jason Kirtland <jek@discorporate.us> | 2007-10-10 18:49:36 +0000 |
---|---|---|
committer | Jason Kirtland <jek@discorporate.us> | 2007-10-10 18:49:36 +0000 |
commit | d3fb340bc2a3729ed142b1e3211d018e688aa385 (patch) | |
tree | b8cb3c046a336fe6ce5694892d32d03067b2d6e6 /lib/sqlalchemy/databases/oracle.py | |
parent | ba1f5c45ef1d06e83c537bdce69a9d5f79d7d19b (diff) | |
download | sqlalchemy-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.py | 30 |
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): |