diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-06-22 15:36:54 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-06-22 15:36:54 +0000 |
| commit | 1af29a42d2007037f5ea790a005d05dded7d43c1 (patch) | |
| tree | dcc556db40565f7fe900e375b5648ed02c33cca3 /lib/sqlalchemy/databases | |
| parent | 3c1a7710f0c1278a18ddeec28f3f67362fbc5ae7 (diff) | |
| download | sqlalchemy-1af29a42d2007037f5ea790a005d05dded7d43c1.tar.gz | |
- added dialect flag "auto_convert_lobs", defaults to True; will cause any
LOB objects detected in a result set to be forced into OracleBinary
so that the LOB is read() automatically, if no typemap was present
(i.e., if a textual execute() was issued).
Diffstat (limited to 'lib/sqlalchemy/databases')
| -rw-r--r-- | lib/sqlalchemy/databases/oracle.py | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index 55695e1ef..06a8af0f8 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -163,20 +163,33 @@ class OracleExecutionContext(default.DefaultExecutionContext): def get_result_proxy(self): if self.cursor.description is not None: - for column in self.cursor.description: - type_code = column[1] - if type_code in self.dialect.ORACLE_BINARY_TYPES: + if self.dialect.auto_convert_lobs and self.typemap is None: + typemap = {} + binary = False + for column in self.cursor.description: + type_code = column[1] + if type_code in self.dialect.ORACLE_BINARY_TYPES: + binary = True + typemap[column[0].lower()] = OracleBinary() + self.typemap = typemap + if binary: return base.BufferedColumnResultProxy(self) + else: + for column in self.cursor.description: + type_code = column[1] + if type_code in self.dialect.ORACLE_BINARY_TYPES: + return base.BufferedColumnResultProxy(self) return base.ResultProxy(self) class OracleDialect(ansisql.ANSIDialect): - def __init__(self, use_ansi=True, auto_setinputsizes=True, threaded=True, **kwargs): + def __init__(self, use_ansi=True, auto_setinputsizes=True, auto_convert_lobs=True, threaded=True, **kwargs): ansisql.ANSIDialect.__init__(self, default_paramstyle='named', **kwargs) self.use_ansi = use_ansi self.threaded = threaded self.supports_timestamp = self.dbapi is None or hasattr(self.dbapi, 'TIMESTAMP' ) self.auto_setinputsizes = auto_setinputsizes + self.auto_convert_lobs = auto_convert_lobs if self.dbapi is not None: self.ORACLE_BINARY_TYPES = [getattr(self.dbapi, k) for k in ["BFILE", "CLOB", "NCLOB", "BLOB", "LONG_BINARY", "LONG_STRING"] if hasattr(self.dbapi, k)] else: |
