David Mansfield wrote:
Hi All,
I submitted a bug via the email interface to rt: bug-dbd-oracle at
rt.cpan.org, but I have no reason to believe that bug report got
through. I didn't want to have to register a bunch of places to submit
a bug, but I'm willing to if its the only way. Otherwise, is there
someplace I can see if my bug got through correctly?
http://rt.cpan.org/Public/Dist/Display.html?Name=DBD-Oracle
Doesn't look like it did.
Here's the text of my report FWIW:
Subject: execute_array does not honor UTF8 flag like execute does (and
like docs say it should)
Body:
Hi All.
When a statement with placeholders is 'execute'd then DBD::Oracle
follows the docs as per the section 'Sending Data using Placeholders',
with respect to bound variables with the utf8 flag set (i.e a "Perl
Unicode string").
However, if 'execute_array' is used, only the NLS_LANG controls this
behavior (and database values can be corrupted as a result).
This appears to be due to the fact that dbdimp.c:do_bind_array_exec
doesn't (actually CAN'T) have the same logic that the the other 'rebind'
methods have for handling UTF8.
My suggestion:
* execute and execute_array MUST have the exact same semantics
* in the guts of ora_st_execute_array, have the code check in the nested
'for' loops over the data for consistency of the utf8 flag across the
entire list of values for a given placeholder
* if all of the values are UTF8, use the existing approach as the normal
bind (check csform, csid etc)
* if some values are UTF8, others are not, croak with "cannot mix
Unicode and native encoding in execute_array for placeholder :foo"
I'm not subscribed to anything, so if possible, cc me on any follow ups?
Thanks,
David
Interesting issue. I have a lot of execute_array calls with utf-8 data
so I'll go away and check where and when I have NLS_LANG set.
The DBD::Oracle maintainer is on this list but I cannot comment as to
his preference for how bugs are reported.
Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com