diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-01-03 19:09:25 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-01-03 19:09:25 +0000 |
commit | f43f9a28303e8e36b2018cdc0df9f01ff765cf6f (patch) | |
tree | e1604f22edc61b622d225740679ffde541c1dd81 | |
parent | 982787d822251f7f7b710099cfed684a4f944570 (diff) | |
download | sqlalchemy-f43f9a28303e8e36b2018cdc0df9f01ff765cf6f.tar.gz |
- Fixed bug which was preventing out params of certain types
from being received; thanks a ton to huddlej at wwu.edu !
[ticket:1265]
-rw-r--r-- | CHANGES | 5 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/oracle.py | 7 | ||||
-rw-r--r-- | test/dialect/oracle.py | 8 |
3 files changed, 15 insertions, 5 deletions
@@ -46,6 +46,11 @@ CHANGES - Fixed bug in exception raise when FK columns not present during reflection. [ticket:1241] +- oracle + - Fixed bug which was preventing out params of certain types + from being received; thanks a ton to huddlej at wwu.edu ! + [ticket:1265] + 0.4.8 ===== - orm diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index 5baef60d5..f89dc9a94 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -226,7 +226,12 @@ class OracleExecutionContext(default.DefaultExecutionContext): for bind, name in self.compiled.bind_names.iteritems(): if name in self.out_parameters: type = bind.type - self.out_parameters[name] = type.dialect_impl(self.dialect).result_processor(self.dialect)(self.out_parameters[name].getvalue()) + + result_processor = type.dialect_impl(self.dialect).result_processor(self.dialect) + if result_processor is not None: + self.out_parameters[name] = result_processor(self.out_parameters[name].getvalue()) + else: + self.out_parameters[name] = self.out_parameters[name].getvalue() else: for k in self.out_parameters: self.out_parameters[k] = self.out_parameters[k].getvalue() diff --git a/test/dialect/oracle.py b/test/dialect/oracle.py index a6eb9e496..3d6486b6a 100644 --- a/test/dialect/oracle.py +++ b/test/dialect/oracle.py @@ -12,19 +12,19 @@ class OutParamTest(TestBase, AssertsExecutionResults): def setUpAll(self): testing.db.execute(""" -create or replace procedure foo(x_in IN number, x_out OUT number, y_out OUT number) IS +create or replace procedure foo(x_in IN number, x_out OUT number, y_out OUT number, z_out OUT varchar) IS retval number; begin retval := 6; x_out := 10; y_out := x_in * 15; + z_out := NULL; end; """) def test_out_params(self): - result = testing.db.execute(text("begin foo(:x, :y, :z); end;", bindparams=[bindparam('x', Numeric), outparam('y', Numeric), outparam('z', Numeric)]), x=5) - assert result.out_parameters == {'y':10, 'z':75}, result.out_parameters - print result.out_parameters + result = testing.db.execute(text("begin foo(:x_in, :x_out, :y_out, :z_out); end;", bindparams=[bindparam('x_in', Numeric), outparam('x_out', Numeric), outparam('y_out', Numeric), outparam('z_out', oracle.OracleString)]), x_in=5) + assert result.out_parameters == {'x_out':10, 'y_out':75, 'z_out':None}, result.out_parameters def tearDownAll(self): testing.db.execute("DROP PROCEDURE foo") |