From 4e02fdf9dd78de05668370257c4c48bcf4572065 Mon Sep 17 00:00:00 2001 From: Constantin Michael Date: Mon, 31 Oct 2011 12:33:32 +0200 Subject: Store the OCIDefine handle for LOB result parameters and reuse it on rebinding --- odb/oracle/statement.cxx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'odb/oracle/statement.cxx') diff --git a/odb/oracle/statement.cxx b/odb/oracle/statement.cxx index f29136a..129b237 100644 --- a/odb/oracle/statement.cxx +++ b/odb/oracle/statement.cxx @@ -288,6 +288,12 @@ namespace odb if (r == OCI_ERROR || r == OCI_INVALID_HANDLE) translate_error (err, r); + // The OCIDefine handle is stored in the size member of the bind in + // case the LOB parameter is rebound. If rebinding is necessary, the + // same OCIDefine handle is used. + // + b->size = reinterpret_cast (h); + // LOB prefetching is only supported in OCI version 11.1 and greater // and in Oracle server 11.1 and greater. If this code is called // against a pre 11.1 server, the call to OCIAttrSet will return an @@ -396,7 +402,8 @@ namespace odb lob->reset (h); } - OCIDefine* h(0); + OCIDefine* h (reinterpret_cast (b->size)); + sword r (OCIDefineByPos (stmt_, &h, err, -- cgit v1.1