The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!perl

print "1..$_tests\n";

require DBE;

#DBE->trace( 3 );

$con = DBE->connect(
	'driver' => 'Text',
	'dbq' => '.',
	'croak' => 0,
	'warn' => 1,
);
if( ! $con ) {
	&_skip_all( "connection failed" );
}

$res = $con->query( q/% SELECT * FROM [_table1]/ );
_check( $res ) or _skip_all();
_check( $res->num_rows == 10 );
_check( $res->bind_column( 2, $name ) );
_check( $res->bind_column( 3, $value ) );
@names = $res->fetch_names();
_check( @names == 4 );
_check( $res->fetch_row( \%row ) );
_check( $row{'name'} eq 'key1' );
_check( $row{'name'} eq $name );
_check( $row{'value'} eq $value );
_check( $res->row_tell == 1 );
_check( $res->fetch_row( \@row ) );
_check( $row[1] eq 'key2' );
_check( $row[1] eq $name );
_check( $row[2] eq $value );
_check( $res->row_tell == 2 );
_check( $row = $res->fetchrow_hashref );
_check( $row->{'name'} eq 'key3' );
_check( $row->{'name'} eq $name );
_check( $row->{'value'} eq $value );
_check( $res->row_tell == 3 );
_check( $row = $res->fetchrow_arrayref );
_check( $row->[1] eq 'key4' );
_check( $row->[1] eq $name );
_check( $row->[2] eq $value );
_check( $res->row_tell == 4 );
_check( $res->fetch );
_check( $name eq 'key5' );
_check( $value eq 'data5' );
_check( $res->row_seek( 0 ) == 5 );
_check( $res->row_tell == 0 );
_check( $res->fetch );
_check( $name eq 'key1' );
_check( $res->num_fields == 4 );
_check( $res->field_seek(1) == 0 );
%field = $res->fetch_field;
_check( $field{'COLUMN_NAME'} eq 'name' );
_check( $res->field_tell == 2 );

BEGIN {
	$_tests = 36;
	$_pos = 1;
	unless( defined $ENV{'HARNESS_ACTIVE'} ) {
		unshift @INC, 'blib/lib', 'blib/arch';
	}
}

1;

sub _check {
	my( $val ) = @_;
	print "" . ($val ? "ok" : "not ok") . " $_pos\n";
	$_pos ++;
	return $val;
}

sub _skip_all {
	print STDERR "Skipped: " . ($_[0] || "for various reasons") . "\n";
	for( ; $_pos <= $_tests; $_pos ++ ) {
		print "ok $_pos\n";
	}
	exit;
}