[svn:dbd-oracle] r14946 - in dbd-oracle/trunk: . t
[email protected] Thu, 13 Oct 2011 10:28:20 -0700 (PDT)
| Newsgroups | perl.dbd.oracle.changes |
|---|---|
| Message-ID | <[email protected]> |
Author: yanick
Date: Thu Oct 13 10:28:20 2011
New Revision: 14946
Added:
dbd-oracle/trunk/t/rt13865.t
Modified:
dbd-oracle/trunk/Changes
dbd-oracle/trunk/Oracle.pm
Log:
COLUMN_SIZE of VARCHAR2 is in chars, not bytes. (rt-13865)
Modified: dbd-oracle/trunk/Changes
==============================================================================
--- dbd-oracle/trunk/Changes (original)
+++ dbd-oracle/trunk/Changes Thu Oct 13 10:28:20 2011
@@ -1,6 +1,11 @@
Revision history for DBD::Oracle
Changes in DBD-Oracle 1.XX
+ [BUG FIXES]
+ - COLUMN_SIZE of VARCHAR2 returns size in chars, not bytes. [RT#13865]
+ (reported by Stefano and Laurent Dami)
+
+
[DOCUMENTATION]
- add mention of the github mirror of the subversion repository
- add 'resources' info to META.yml
Modified: dbd-oracle/trunk/Oracle.pm
==============================================================================
--- dbd-oracle/trunk/Oracle.pm (original)
+++ dbd-oracle/trunk/Oracle.pm Thu Oct 13 10:28:20 2011
@@ -650,6 +650,7 @@
)
, 'FLOAT' , tc.DATA_PRECISION
, 'DATE' , 19
+ , 'VARCHAR2' , tc.CHAR_LENGTH
, tc.DATA_LENGTH
) COLUMN_SIZE
, decode( tc.DATA_TYPE
Added: dbd-oracle/trunk/t/rt13865.t
==============================================================================
--- (empty file)
+++ dbd-oracle/trunk/t/rt13865.t Thu Oct 13 10:28:20 2011
@@ -0,0 +1,69 @@
+use strict;
+
+use DBI;
+use DBD::Oracle;
+
+use Test::More;
+
+use lib 't';
+require 'nchar_test_lib.pl';
+
+my $dbh = db_handle() or plan skip_all => "can't connect to database";
+
+my %priv = map { $_ => 1 } get_privs( $dbh );
+
+unless ( ( $priv{'CREATE TABLE'} or $priv{'CREATE ANY TABLE'} )
+ and ( $priv{'DROP TABLE'} or $priv{'DROP ANY TABLE'} ) ) {
+ plan skip_all => q{requires permissions 'CREATE TABLE' and 'DROP TABLE'};
+}
+
+plan tests => 5;
+
+$dbh->do( 'DROP TABLE RT13865' );
+
+$dbh->do( <<'END_SQL' ) or die $dbh->errstr;
+CREATE TABLE RT13865(
+ COL_INTEGER INTEGER,
+ COL_NUMBER NUMBER,
+ COL_NUMBER_37 NUMBER(37),
+ COL_DECIMAL NUMBER(9,2),
+ COL_FLOAT FLOAT(126),
+ COL_VC2 VARCHAR2(67),
+ COL_VC2_69CHAR VARCHAR2(69 CHAR)
+)
+END_SQL
+
+my $col_h = $dbh->column_info( undef, undef, 'RT13865', 'COL_INTEGER' );
+
+is $col_h->fetchrow_hashref->{COLUMN_SIZE} => 38,
+ "INTEGER is alias for NUMBER(38)";
+
+$col_h = $dbh->column_info( undef, undef, 'RT13865', 'COL_NUMBER_37' );
+is $col_h->fetchrow_hashref->{COLUMN_SIZE} => 37,
+ "NUMBER(37)";
+
+$col_h = $dbh->column_info( undef, undef, 'RT13865', 'COL_NUMBER' );
+cmp_ok $col_h->fetchrow_hashref->{COLUMN_SIZE}, '>', 0,
+ "NUMBER";
+
+$col_h = $dbh->column_info( undef, undef, 'RT13865', 'COL_VC2' );
+is $col_h->fetchrow_hashref->{COLUMN_SIZE} => 67,
+ "VARCHAR(67)";
+
+$col_h = $dbh->column_info( undef, undef, 'RT13865', 'COL_VC2_69CHAR' );
+is $col_h->fetchrow_hashref->{COLUMN_SIZE} => 69,
+ "VARCHAR(69)";
+
+
+$dbh->do( 'DROP TABLE RT13865' );
+
+# utility functions
+
+sub get_privs {
+ my $dbh = shift;
+
+ my $sth = $dbh->prepare( 'SELECT PRIVILEGE from session_privs' );
+ $sth->execute;
+
+ return map { $_->[0] } @{ $sth->fetchall_arrayref };
+}