[svn:dbd-oracle] r15135 - in dbd-oracle/trunk: . t
[email protected] Wed, 8 Feb 2012 12:48:56 -0800 (PST)
| Newsgroups | perl.dbd.oracle.changes |
|---|---|
| Message-ID | <[email protected]> |
Author: yanick
Date: Wed Feb 8 12:48:55 2012
New Revision: 15135
Added:
dbd-oracle/trunk/t/rt74753-utf8-encoded.t
Modified:
dbd-oracle/trunk/Changes
dbd-oracle/trunk/MANIFEST
dbd-oracle/trunk/dbdimp.c
Log:
PL/SQL out values are utf8 encoded
Conflicts:
Changes
Modified: dbd-oracle/trunk/Changes
==============================================================================
--- dbd-oracle/trunk/Changes (original)
+++ dbd-oracle/trunk/Changes Wed Feb 8 12:48:55 2012
@@ -1,12 +1,14 @@
Revision history for DBD::Oracle
-1.38 2012-02-02
+NEXT 2012-02-08
[BUG FIXES]
- TAF supports now conditional to presence of OCI_ATTR_TAF_ENABLED
[RT73798]
- detect broken Win32::TieRegistry (patch by Rafael Kitover (Caelum))
[RT74544]
+ - PL/SQL out values were not utf8 encoded [RT74753]
+ (Steve Baldwin + Martin J. Evans)
[DOCUMENTATION]
- Mention the release of Oracle Instant Client 64 bit which does not work
Modified: dbd-oracle/trunk/MANIFEST
==============================================================================
--- dbd-oracle/trunk/MANIFEST (original)
+++ dbd-oracle/trunk/MANIFEST Wed Feb 8 12:48:55 2012
@@ -89,5 +89,6 @@
t/80ora_charset.t
t/nchar_test_lib.pl
t/rt13865.t
+t/rt74753-utf8-encoded.t
test.pl
typemap
Modified: dbd-oracle/trunk/dbdimp.c
==============================================================================
--- dbd-oracle/trunk/dbdimp.c (original)
+++ dbd-oracle/trunk/dbdimp.c Wed Feb 8 12:48:55 2012
@@ -3198,6 +3198,13 @@
SvCUR_set(sv, phs->alen);
*SvEND(sv) = '\0';
SvPOK_only_UTF8(sv);
+ if (CSFORM_IMPLIES_UTF8(SQLCS_IMPLICIT)) {
+#ifdef sv_utf8_decode
+ sv_utf8_decode(sv);
+#else
+ SvUTF8_on(sv);
+#endif
+ }
}
else { /* shouldn't happen */
debug = 2;
Added: dbd-oracle/trunk/t/rt74753-utf8-encoded.t
==============================================================================
--- (empty file)
+++ dbd-oracle/trunk/t/rt74753-utf8-encoded.t Wed Feb 8 12:48:55 2012
@@ -0,0 +1,86 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+use DBI;
+use Encode;
+
+unshift @INC ,'t';
+require 'nchar_test_lib.pl';
+
+my $dsn = oracle_test_dsn();
+my $dbuser = $ENV{ORACLE_USERID} || 'scott/tiger';
+
+$ENV{NLS_LANG} = 'AMERICAN_AMERICA.UTF8';
+$ENV{NLS_NCHAR} = 'UTF8';
+
+my $dbh = DBI->connect( $dsn, $dbuser, '', {
+ PrintError => 0, AutoCommit => 0, RaiseError => 1,
+},);
+
+$dbh->do(q(alter session set nls_territory = 'GERMANY'));
+
+my $sth = $dbh->prepare(<<"END_SQL");
+ SELECT ltrim(rtrim(to_char(0, 'L'))) FROM dual
+END_SQL
+
+$sth->execute;
+
+my ($val);
+$sth->bind_columns( \($val) );
+
+$sth->fetch;
+
+is Encode::is_utf8($val) => 1, "utf8 encoded";
+
+$sth->finish;
+
+$val = undef;
+
+$sth = $dbh->prepare(<<'END_SQL');
+declare
+ l_ret varchar2(10);
+begin
+ select ltrim(rtrim(to_char(0, 'L')))
+ into l_ret
+ from dual;
+ --
+ :ret := l_ret;
+end;
+END_SQL
+
+$sth->bind_param_inout(':ret', \$val, 100);
+$sth->execute;
+
+is Encode::is_utf8($val) => 1, "utf8 encoded";
+
+$dbh->disconnect;
+
+
+__END__
+
+undef $val;
+
+$sth = $dbh->prepare(<<'END_SQL');
+declare
+ l_ret varchar2(10);
+begin
+ select ltrim(rtrim(to_char(0, 'L')))
+ into l_ret
+ from dual;
+ --
+ :ret := l_ret;
+end;
+END_SQL
+
+$sth->bind_param_inout( ':ret', \$val, 100 );
+$sth->execute;
+
+diag "val=[$val] len=@{[ length($val) ]}" while $sth->fetch;
+
+diag "utf8 is ", Encode::is_utf8($val) ? 'on' : 'off';
+
+$dbh->disconnect;