DBIx-Custom / t / 02-sqlite.t /
yuki-kimoto add tests
338d553 15 years ago
1 contributor
165 lines | 4.06kb
use Test::More;
use strict;
use warnings;
use DBI qw/:sql_types/;

BEGIN {
    eval { require DBD::SQLite; 1 }
        or plan skip_all => 'DBD::SQLite required';
    eval { DBD::SQLite->VERSION >= 1 }
        or plan skip_all => 'DBD::SQLite >= 1.00 required';

    plan 'no_plan';
    use_ok('DBI::Custom');
}

package Test::DBI::Custom;
use Object::Simple;

sub dbi : Attr {}

sub new {
    my $self = shift->SUPER::new;
    my $dbi = DBI::Custom->new->connect_info(data_source => 'dbi:SQLite:dbname=:memory:');
    
    $dbi->connect;
    $self->dbi($dbi);
    return $self;
}

sub create_table {
    my ($self, $create_table) = @_;
    $self->dbi->query_raw_sql($create_table);
    return $self;
}

sub create_table1 {
    my $self = shift;
    $self->create_table("create table t1 (k1 char(255), k2 char(255), k3 char(255), k4 char(255), k5 char(255));");
    return $self;
}

sub insert {
    my ($self, @values_list) = @_;
    my $table = ref $values_list[0] ? '' : shift;
    $table ||= 't1';
    
    foreach my $values (@values_list) {
        my $sql = $self->dbi->query(
            "insert into $table {insert_values}", {insert_values => $values}
        );
    }
    return $self;
}

sub test {
    my ($self, $code) = @_;
    $code->($self->dbi);
}

Object::Simple->build_class;

package main;
my $t = Test::DBI::Custom->new;

$t->new->create_table1->insert({k1 => 1, k2 => 2}, {k1 => 3, k2 => 4})->test(sub {
    my $dbi = shift;
    
    my $r;     # resultset
    my @rows;
    my $rows;
    
    #----------
    $r = $dbi->query("select k1, k2 from t1");
    
    @rows = ();
    while (my $row = $r->fetch) {
        push @rows, [@$row];
    }
    is_deeply(\@rows, [[1, 2], [3, 4]], 'fetch');
    
    
    #----------
    $r = $dbi->query("select k1, k2 from t1");
    
    @rows = ();
    while (my @row = $r->fetch) {
        push @rows, [@row];
    }
    is_deeply(\@rows, [[1, 2], [3, 4]], 'fetch list context');
    
    
    #-----------
    $r = $dbi->query("select k1, k2 from t1;");
    
    @rows = ();
    while (my $row = $r->fetch_hash) {
        push @rows, {%$row};
    }
    is_deeply(\@rows, [{k1 => 1, k2 => 2}, {k1 => 3, k2 => 4}], 'fetch_hash');
    
    
    #-----------
    $r = $dbi->query("select k1, k2 from t1;");
    
    @rows = ();
    while (my %row = $r->fetch_hash) {
        push @rows, {%row};
    }
    is_deeply(\@rows, [{k1 => 1, k2 => 2}, {k1 => 3, k2 => 4}], 'fetch hash list context');
    
    
    #-----------
    $r = $dbi->query("select k1, k2 from t1");
    
    $rows = $r->fetch_all;
    is_deeply($rows, [[1, 2], [3, 4]], 'fetch_all');
    
    
    #------------
    $r = $dbi->query("select k1, k2 from t1");
    
    @rows = $r->fetch_all;
    is_deeply(\@rows, [[1, 2], [3, 4]], 'fetch_all list context');
    
    
    #------------
    $r = $dbi->query("select k1, k2 from t1");
    
    @rows = $r->fetch_all_hash;
    is_deeply($rows, [[1, 2], [3, 4]], 'fetch_all_hash');
    
    
    #-------------
    $r = $dbi->query("select k1, k2 from t1");
    
    @rows = $r->fetch_all;
    is_deeply(\@rows, [[1, 2], [3, 4]], 'fetch_all_hash list context');
    
    
    #---------------------------------------------------------------------
    $dbi->fetch_filter(sub {
        my ($key, $value, $type, $sth, $i) = @_;
        if ($key eq 'k1' && $value == 1 && $type =~ /char/i && $i == 0 && $sth->{TYPE}->[$i] eq $type) {
            return $value * 3;
        }
        return $value;
    });
    
    #-----------------------------------
    $r = $dbi->query("select k1, k2 from t1");
    
    $rows = $r->fetch_all;
    
    is_deeply($rows, [[3, 2], [3, 4]], 'fetch_filter array');
    
    
    #----------------------------------
    $r = $dbi->query("select k1, k2 from t1");
    
    $rows = $r->fetch_all_hash;
    
    is_deeply($rows, [{k1 => 3, k2 => 2}, {k1 => 3, k2 => 4}], 'fetch_filter hash');

});