[svn:dbd-oracle] r15467 - in dbd-oracle/trunk: . lib/DBD

[email protected] Fri, 2 Nov 2012 12:59:11 -0700 (PDT)
Newsgroups perl.dbd.oracle.changes
Message-ID <[email protected]>
Author: mjevans
Date: Fri Nov  2 12:59:09 2012
New Revision: 15467

Modified:
   dbd-oracle/trunk/Changes
   dbd-oracle/trunk/lib/DBD/Oracle.pm

Log:
Fix RT 80566 - patch from Steffen


Modified: dbd-oracle/trunk/Changes
==============================================================================
--- dbd-oracle/trunk/Changes	(original)
+++ dbd-oracle/trunk/Changes	Fri Nov  2 12:59:09 2012
@@ -27,6 +27,10 @@
 
   - ora_server_version was not documented.
 
+  - Fix RT80566. 70meta.t test fails with Oracle 8 because
+    ALL_TAB_COLUMNS.CHAR_LENGTH is new in Oracle 9. Use DATA_LENGTH
+    instead on pre-9 versions. Thanks to Steffen Goeldner.
+
   [MISCELLANEOUS]
 
   - The original 26exe_array test was replaced some time ago with a

Modified: dbd-oracle/trunk/lib/DBD/Oracle.pm
==============================================================================
--- dbd-oracle/trunk/lib/DBD/Oracle.pm	(original)
+++ dbd-oracle/trunk/lib/DBD/Oracle.pm	Fri Nov  2 12:59:09 2012
@@ -606,8 +606,9 @@
 	my $dbh  = shift;
 	my $attr = ( ref $_[0] eq 'HASH') ? $_[0] : {
 	    'TABLE_SCHEM' => $_[1],'TABLE_NAME' => $_[2],'COLUMN_NAME' => $_[3] };
+	my $ora_server_version = ora_server_version($dbh);
 	my($typecase,$typecaseend) = ('','');
-	if (ora_server_version($dbh)->[0] >= 8) {
+	if ($ora_server_version->[0] >= 8) {
 	    $typecase = <<'SQL';
 CASE WHEN tc.DATA_TYPE LIKE 'TIMESTAMP% WITH% TIME ZONE' THEN 95
      WHEN tc.DATA_TYPE LIKE 'TIMESTAMP%'                 THEN 93
@@ -617,6 +618,7 @@
 SQL
 	    $typecaseend = 'END';
 	}
+  my $char_length = $ora_server_version->[0] < 9 ? 'DATA_LENGTH':'CHAR_LENGTH';
 	my $SQL = <<"SQL";
 SELECT *
   FROM
@@ -661,10 +663,10 @@
                         )
          , 'FLOAT'    , tc.DATA_PRECISION
          , 'DATE'     , 19
-         , 'VARCHAR2' , tc.CHAR_LENGTH
-         , 'CHAR'     , tc.CHAR_LENGTH
-         , 'NVARCHAR2', tc.CHAR_LENGTH
-         , 'NCHAR'    , tc.CHAR_LENGTH
+         , 'VARCHAR2' , tc.$char_length
+         , 'CHAR'     , tc.$char_length
+         , 'NVARCHAR2', tc.$char_length
+         , 'NCHAR'    , tc.$char_length
          , tc.DATA_LENGTH
          )                   COLUMN_SIZE
        , decode( tc.DATA_TYPE