-*- coding: utf-8; fill-column: 68 -*-
+
=======
CHANGES
=======
- Wrote a docstring for Oracle dialect. Apparently that
Ohloh "few source code comments" label is starting to sting
:).
+
+ - Setting the auto_convert_lobs to False on create_engine()
+ will also instruct the OracleBinary type to return the
+ cx_oracle LOB object unchanged.
+
0.5.0rc2
========
- orm
for all statement executions, even plain string-based statements for which SQLA has no awareness
of result typing. This is so that calls like fetchmany() and fetchall() can work in all cases
without raising cursor errors. The conversion of LOB in all cases, as well as the "prefetch"
-of LOB objects, can be disabled using auto_convert_lobs=False. However, OracleBinary type
-objects will still issue the conversion of LOBs upon access - use a string-based or otherwise
-untyped select() construct, or a custom Binary type, to retrieve LOB objects directly in this case.
-A future release may include a flag on OracleBinary to further disable LOB conversion at that level.
+of LOB objects, can be disabled using auto_convert_lobs=False.
LIMIT/OFFSET Support
def result_processor(self, dialect):
super_process = super(OracleText, self).result_processor(dialect)
+ if not dialect.auto_convert_lobs:
+ return super_process
lob = dialect.dbapi.LOB
def process(value):
if isinstance(value, lob):
return None
def result_processor(self, dialect):
+ if not dialect.auto_convert_lobs:
+ return None
lob = dialect.dbapi.LOB
def process(value):
if isinstance(value, lob):
from sqlalchemy.sql import table, column
from sqlalchemy.databases import oracle
from testlib import *
+from testlib.testing import eq_
from testlib.engines import testing_engine
import os
finally:
testing.db.execute("DROP TABLE Z_TEST")
+ def test_raw_lobs(self):
+ engine = testing_engine(options=dict(auto_convert_lobs=False))
+ metadata = MetaData()
+ t = Table("z_test", metadata, Column('id', Integer, primary_key=True),
+ Column('data', Text), Column('bindata', Binary))
+ t.create(engine)
+ try:
+ engine.execute(t.insert(), id=1, data='this is text', bindata='this is binary')
+ row = engine.execute(t.select()).fetchone()
+ eq_(row['data'].read(), 'this is text')
+ eq_(row['bindata'].read(), 'this is binary')
+ finally:
+ t.drop(engine)
class BufferedColumnTest(TestBase, AssertsCompiledSQL):
__only_on__ = 'oracle'