summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/databases
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-06-22 15:36:54 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-06-22 15:36:54 +0000
commit1af29a42d2007037f5ea790a005d05dded7d43c1 (patch)
treedcc556db40565f7fe900e375b5648ed02c33cca3 /lib/sqlalchemy/databases
parent3c1a7710f0c1278a18ddeec28f3f67362fbc5ae7 (diff)
downloadsqlalchemy-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.py21
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: