[Omaha.pm] :Sybase success, build errors

Jay Hannah jhannah at omnihotels.com
Wed Aug 10 08:26:46 PDT 2005


> diff -ruN exec.t.original exec.t

Hmm... The patch was longer than the file. 

If you prefer, here's the full contents of the modified file.

j



#!perl
#
# $Id: exec.t,v 1.8 2005/06/27 18:04:18 mpeppler Exp $

use lib 'blib/lib';
use lib 'blib/arch';

use lib 't';
use _test;

use strict;

#use Test::More qw(no_plan);
use Test::More tests => 41;


BEGIN { use_ok('DBI', ':sql_types');
        use_ok('DBD::Sybase');}


use vars qw($Pwd $Uid $Srv $Db);

my $using_freetds = ($ENV{SYBASE} =~ /freetds/i) ? 1 : 0;

#DBI->trace(3);

($Uid, $Pwd, $Srv, $Db) = _test::get_info();

#DBI->trace(3);
my $dbh = DBI->connect("dbi:Sybase:server=$Srv;database=$Db", $Uid, $Pwd, {PrintError=>1});
#exit;
ok(defined($dbh), 'Connect');

$SIG{__WARN__} = sub { print @_; };
my $sth = $dbh->prepare("exec sp_helpindex \@objname = 'sysusers'");   # Placeholders not supported in freetds
ok(defined($sth), 'Prepare sp_helpindex');

my $rc;
$rc = $sth->execute();
ok(defined($rc), "exec sysusers");

get_all_results($sth);

#$dbh->do("use tempdb");
$dbh->do("set arithabort off");
$dbh->do("if object_id('dbitest') != NULL drop proc dbitest");
$rc = $dbh->do(q{
create proc dbitest @one varchar(20), @two int, @three numeric(5,2), @four smalldatetime, @five float output
as
    select @one, @two, @three, @four
    select * from master..sysprocesses

    return @two
});

ok(defined($rc), "$rc (create proc)");

$sth = $dbh->prepare("exec dbitest \@one = ?, \@two = ?, \@three = ?, \@four = ?, \@five = ? output");
#$rc = $sth->execute("one", 2, 3.2, "jan 1 2001", 5.4);
ok(defined($sth), "prepare dbitest");
ok($sth->bind_param(1, "one"),               "bind_param 1");
ok($sth->bind_param(2, 2, SQL_INTEGER),      "bind_param 2");
ok($sth->bind_param(3, 3.2, SQL_DECIMAL),    "bind_param 3");
ok($sth->bind_param(4, "jan 1 2001"),        "bind_param 4");
ok($sth->bind_param(5, 5.4, SQL_FLOAT),      "bind_param 5");
SKIP: {
  skip "freetds seg faults here", 1 if $using_freetds;
  ok($rc = $sth->execute(), "execute dbitest 1");
}

SKIP: {
  skip "freetds doesn't support placeholders", 2 if $using_freetds;
  #DBI->trace(4);
  get_all_results($sth);
  ok($rc = $sth->execute("one", 25, 333.2, "jan 1 2001", 5.4),  "exec dbitest 2");
  get_all_results($sth);
  ok($rc = $sth->execute(undef, 25, 3.2234, "jan 3 2001", 5.4), "exec dbitest 3");
}

SKIP: {
  skip "freetds doesn't support \$sth->func?", 2 if $using_freetds;
  ok(my @out = $sth->func('syb_output_params'),                 '$sth->func');
  is($out[0], 5.4,                                              "out param 1");
}


#print "@out\n";
#do {
#    local $^W = 0;
#    while(my $d = $sth->fetch) {
#	print "@$d\n";
#    }
#} while($sth->{syb_more_results});

# test various failure modes:

$sth->{syb_do_proc_status} = 1;
$dbh->{syb_flush_finish} = 0;

SKIP: {
  skip "freetds doesn't support placeholders", 6 if $using_freetds;
  ok($rc = $sth->execute(undef, 0, 3.2234, "jan 3 2001", 5.4),   "execute fail mode 1");
  get_all_results($sth);
  #DBI->trace(3);
  ok($rc = $sth->execute("raise", 1, 3.2234, "jan 3 2001", 5.4), "execute fail mode 2");
  get_all_results($sth);
  ok($rc = $sth->execute(undef, 0, 3.2234, "jan 3 2001", 5.4),   "execute fail mode 3");
  #DBI->trace(0);
  get_all_results($sth);

  $dbh->{syb_flush_finish} = 1;
  ok($rc = $sth->execute(undef, 0, 3.2234, "jan 3 2001", 5.4),   "execute fail mode 4");
  get_all_results($sth);
  #DBI->trace(3);
  ok($rc = $sth->execute(undef, 1, 3.2234, "jan 3 2001", 5.4),   "execute fail mode 5");
  get_all_results($sth);
  #DBI->trace(0);
  ok($rc = $sth->execute(undef, 0, 3.2234, "jan 3 2001", 5.4),   "execute fail mode 6");
  get_all_results($sth);
}


ok($dbh->do("drop proc dbitest"),                                  "drop proc dbitest 1");
ok($dbh->do("if object_id('dbitest') != NULL drop proc dbitest"),  "drop proc dbitest 2");
$rc = $dbh->do(q{
create proc dbitest @one varchar(20), @two int, @three numeric(5,2), @four smalldatetime --, @five float = null output
as
    select @one, @two, @three, @four

});

ok(defined($rc), "$rc (create proc)");

SKIP: {
  skip "freetds doesn't support bind_param nor placeholders", 7 if $using_freetds;
  ok($sth = $dbh->prepare("exec dbitest ?, ?, ?, ?"),      "prepare");
  ok($sth->bind_param(1, 'String 1', SQL_VARCHAR),         "bind_param 1");
  ok($sth->bind_param(2, 1, SQL_INTEGER),                  "bind_param 2");
  ok($sth->bind_param(3, 3.25, SQL_DECIMAL),               "bind_param 3");
  ok($sth->bind_param(4, '2005-06-27', SQL_DATETIME),      "bind param 4");

  for (0 .. 1) {
    $sth->execute('String 1', 1, 3.25, '2005-06-27');
    while(my $row = $sth->fetch) {
      ok($row->[2] == 3.25, "Implicit finish handling");
    }
  }
}

SKIP: {
  skip "freetds doesn't support bind_param nor placeholders", 7 if $using_freetds;
  $dbh->{syb_do_proc_status} = 1;
  ok($sth = $dbh->prepare("exec dbitest ?, ?, ?, ?"),  "prepare");
  ok($sth->bind_param(1, 'String 1', SQL_VARCHAR),     "bind_param 1");
  ok($sth->bind_param(2, 1, SQL_INTEGER),              "bind_param 2");
  ok($sth->bind_param(3, 3.25, SQL_DECIMAL),           "bind_param 3");
  ok($sth->bind_param(4, '2005-06-27', SQL_DATETIME),  "bind_param 4");

  for (0 .. 1) {
    $sth->execute('String 1', 1, 3.25, '2005-06-27');
    while(my $row = $sth->fetch) {
      ok($row->[2] == 3.25, "Implicit finish handling");
    }
  }
}

ok($dbh->do("drop proc dbitest"),     "drop proc dbitest");

sub get_all_results {
    my $sth = shift;

    do {
	while(my $d = $sth->fetch) {
	    #print "@$d\n";
	    ;
	}
    } while($sth->{syb_more_results});
}



More information about the Omaha-pm mailing list