From: Jason Kirtland Date: Wed, 10 Oct 2007 18:49:36 +0000 (+0000) Subject: - Fixed oracle 'use_ansi'-via-engine-url handling, added support for 'mode=sysdba... X-Git-Tag: rel_0_4_0~45 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d3fb340bc2a3729ed142b1e3211d018e688aa385;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Fixed oracle 'use_ansi'-via-engine-url handling, added support for 'mode=sysdba' et al. --- diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index 848a68ff35..2c5eacdbde 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):