On Mon, Feb 09, 2004 at 02:26:22PM +0200, Marko Asplund wrote:
On Fri, 2004-02-06 at 15:00, Tim Bunce wrote:
On Fri, Feb 06, 2004 at 11:33:54AM +0200, Marko Asplund wrote:
On Wed, 2004-02-04 at 21:08, Tim Bunce wrote:
Try running the DBD::Oracle v1.12 t/long.t using DBD::Oracle v1.15 (I don't know if it'll work or not, I don't think anyone's tried that)
t/long.t from DBD::Oracle v1.12 runs without errors with v1.15 driver. tests number 195-198 fail in v1.15 t/long.t.
So the tests have improved to catch this case. You could also try the other way. Run the v1.15 t/long.t with DBD::Oracle v1.12 (you'll have to disable/ignore some test for new features like the ora_lob_* functions).
i disabled the LOB test block starting on line 278 in DBD::Oracle v1.15 t/long.t. using DBD::Oracle v1.12 driver tests number 13, 106 and 195-198 fail. with v1.15 driver tests 195-198 fail.
But whatever happens, I'm sure the problem is with Oracle.
yes, i understand this but if possible it would be nice to not make the user worry whether a test failure is an indication of a real problem or not for example by skipping the test, outputting an informative message, by listing expected test failures by product version or some other way.
I agree. Patches welcome.
i finally got around implementing this feature. now t/long.t tests number 195-198 are skipped on Oracle8i. this is implemented by writing client library version to a file in Makefile.PL and then loaded in t/long.t. i'm using Data::Dumper dumped hash because there might be more compile/runtime environment attributes that need to be passed e.g. server version. i'm not using mk.pm to not interfere with the configuration mechnism.
best regards,
t. aspa
diff -ru DBD-Oracle-1.15.dist/Makefile.PL DBD-Oracle-1.15-3/Makefile.PL
--- DBD-Oracle-1.15.dist/Makefile.PL 2004-01-28 01:45:15.000000000 +0200
+++ DBD-Oracle-1.15-3/Makefile.PL 2004-03-20 19:05:11.000000000 +0200
@@ -12,6 +12,7 @@
use Config;
use Cwd;
use File::Find;
+use IO::File;
use strict;
# This DBI must be installed before we can build a DBD.
@@ -67,6 +68,7 @@
my(@MK, %MK, $MK_TEXT, %MK_expanding); # parsed macros from Oracle's makefiles
my %mk_target_deps;
my %mk_target_rules;
+my $oraenv = {};
# Options (rarely needed)
# to turn off an option prefix with 'no', ie 'perl Makefile.PL -nob'
@@ -170,6 +172,7 @@
($inspdver{rdbms_ver} = $inspdver{RDBMS}) =~ s/^(\d+\.\d+)\.(\d+).*/${1}0$2/;
print "Oracle version $inspdver{RDBMS} ($inspdver{rdbms_ver})\n" if
$inspdver{RDBMS};
+ $oraenv->{'ORACLE_CLIENT_VERSION'}= $inspdver{rdbms_ver} || 0;
if (!DBI::looks_like_number($inspdver{rdbms_ver}) || $inspdver{rdbms_ver} < 7 ||
$inspdver{rdbms_ver} > 10) {
print qq{
@@ -701,6 +704,17 @@
print "\n";
WriteMakefile( dbd_edit_mm_attribs(\%opts) );
+# save settings
+use Data::Dumper;
+my $oraenvfn = "oraenv.pm";
+my $oraenvfh = new IO::File(">oraenv.pm");
+if($oraenvfh) {
+ $oraenvfh->print(Data::Dumper->Dump([$oraenv]));
+ $oraenvfh->close();
+} else {
+ print STDERR "Warning: failed to open $oraenvfn for writing: $!\n";
+}
+
check_security() unless $os eq 'VMS' or $os eq 'MSWin32' or $os =~ /cygwin/i;
print "\n";
diff -ru DBD-Oracle-1.15.dist/t/long.t DBD-Oracle-1.15-3/t/long.t
--- DBD-Oracle-1.15.dist/t/long.t 2004-01-28 01:45:18.000000000 +0200
+++ DBD-Oracle-1.15-3/t/long.t 2004-03-20 19:03:00.000000000 +0200
@@ -54,6 +54,26 @@
die "RETURNING array: $@";
}
+sub getoraenv {
+ use IO::File;
+ my $oraenvfn = "oraenv.pm";
+ my $oraenvfh = new IO::File($oraenvfn);
+ my $oraenv = {};
+ if($oraenvfh) {
+ my $fsize = -s $oraenvfn;
+ my ($oraenvbuf, $VAR1);
+ $oraenvfh->read($oraenvbuf, $fsize);
+ $oraenvfh->close();
+ eval "$oraenvbuf";
+ $oraenv = $VAR1;
+ }
+ return $oraenv;
+}
+
+my $oraenv = getoraenv();
+my $oracliversion = $oraenv->{ORACLE_CLIENT_VERSION} || 0;
+
+
my @test_sets;
push @test_sets, [ "BLOB", ORA_BLOB, 0 ] if ORA_OCI >= 8;
push @test_sets, [ "CLOB", ORA_CLOB, 0 ] if ORA_OCI >= 8;
@@ -152,13 +172,22 @@
ok(0, $sth = $dbh->prepare("select * from $table order by idx"), 1);
ok(0, $sth->execute, 1);
ok(0, $tmp = $sth->fetchall_arrayref, 1);
-ok(0, @$tmp == 4);
-ok(0, $tmp->[0][1] eq substr($long_data0,0,$out_len),
- cdif($tmp->[0][1], substr($long_data0,0,$out_len), "Len
".length($tmp->[0][1])) );
-ok(0, $tmp->[1][1] eq substr($long_data1,0,$out_len),
- cdif($tmp->[1][1], substr($long_data1,0,$out_len), "Len
".length($tmp->[1][1])) );
-ok(0, $tmp->[2][1] eq substr($long_data2,0,$out_len),
- cdif($tmp->[2][1], substr($long_data2,0,$out_len), "Len
".length($tmp->[2][1])) );
+if($oracliversion>8.1 && $oracliversion<9) {
+ my $rs = "Tests skipped on Oracle8i";
+ skip($rs);
+ skip($rs);
+ skip($rs);
+ skip($rs);
+} else {
+ ok(0, @$tmp == 4);
+ ok(0, $tmp->[0][1] eq substr($long_data0,0,$out_len),
+ cdif($tmp->[0][1], substr($long_data0,0,$out_len), "Len ".length($tmp->[0][1]))
);
+ ok(0, $tmp->[1][1] eq substr($long_data1,0,$out_len),
+ cdif($tmp->[1][1], substr($long_data1,0,$out_len), "Len ".length($tmp->[1][1]))
);
+ ok(0, $tmp->[2][1] eq substr($long_data2,0,$out_len),
+ cdif($tmp->[2][1], substr($long_data2,0,$out_len), "Len ".length($tmp->[2][1]))
);
+}
+
#use Data::Dumper; print Dumper($tmp->[3]);
ok(0, !defined $tmp->[3][1], 1); # NULL # known bug in DBD::Oracle <= 1.13
@@ -447,6 +476,11 @@
return "(cdif error $l1/$l2/$i)";
}
+sub skip ($) {
+ my($msg) = @_;
+ $t++;
+ print "ok $t # skip $msg\n";
+}
sub ok ($$;$) {
my($n, $ok, $warn) = @_;
