Mercurial > hg > monetdb-perl
diff DBD/t/12bind.t @ 0:cedccb7e0143
Copy of clients/perl directory without Tests from MonetDB changeset 4d2d4532228a.
author | Sjoerd Mullender <sjoerd@acm.org> |
---|---|
date | Mon, 19 Sep 2016 15:15:52 +0200 (2016-09-19) |
parents | |
children | a0ec9e080a5b |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/DBD/t/12bind.t @@ -0,0 +1,98 @@ +#!perl -I./t + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# Copyright 1997 - July 2008 CWI, August 2008 - 2016 MonetDB B.V. + +$| = 1; + +use strict; +use warnings; +use DBI(); +use DBD_TEST(); + +use Test::More; + +if (defined $ENV{DBI_DSN}) { + plan tests => 6; +} else { + plan skip_all => 'Cannot test without DB info'; +} + +my $dbh = DBI->connect or die "Connect failed: $DBI::errstr\n"; +ok ( defined $dbh, 'Connection'); + +ok( DBD_TEST::tab_create( $dbh ),"Create the test table $DBD_TEST::table_name"); + +my $data = +[ + [ 1,'foo' ,'me' x 120 ,'1998-05-13','1988-05-13 01:12:33'] +, [ 2,'bar' ,'bar varchar' ,'1998-05-14','1998-05-14 01:25:33'] +, [ 3,'bletch','bletch varchar','1998-05-15','1998-05-15 01:15:33'] +, [ 4,'bletch','me' x 14 ,'1998-05-15','1998-05-15 01:15:33'] +]; + +ok( tab_insert( $dbh, $data ),'Insert test data'); + +ok( tab_select( $dbh ),'Select test data'); + +ok( DBD_TEST::tab_delete( $dbh ),'Drop test table'); + +ok( $dbh->disconnect,'Disconnect'); + + +sub tab_select +{ + my $dbh = shift; + + my $sth = $dbh->prepare("SELECT A,B,C,D FROM $DBD_TEST::table_name WHERE a = ?") + or return undef; + my $ti = DBD_TEST::get_type_for_column( $dbh,'A'); + for my $v ( 1, 3, 2, 4, 10 ) { + $sth->bind_param( 1, $v, { TYPE => $ti->{DATA_TYPE} } ); + $sth->execute; + while ( my $row = $sth->fetch ) { + print "# -- $row->[0] length:", length $row->[1]," $row->[1] $row->[2] $row->[3]\n"; + if ( $row->[0] != $v ) { + print "# Bind value failed! bind value = $v, returned value = $row->[0]\n"; + return undef; + } + } + } + return 1; +} + +sub tab_insert +{ + my $dbh = shift; + my $data = shift; + + my $sth = $dbh->prepare("INSERT INTO $DBD_TEST::table_name (A, B, C, D) VALUES (?, ?, ?, ?)"); + unless ( $sth ) { + print $DBI::errstr; + return 0; + } + $sth->{PrintError} = 1; + for ( @$data ) { + my $ti; + + $ti = DBD_TEST::get_type_for_column( $dbh,'A'); + $sth->bind_param( 1, $_->[ 0], { TYPE => $ti->{DATA_TYPE} } ); + + $ti = DBD_TEST::get_type_for_column( $dbh,'B'); +# $_->[1] = $_->[1] x (int( int( $ti->{COLUMN_SIZE} / 2 ) / length( $_->[1] ) ) ); # XXX + $sth->bind_param( 2, $_->[ 1], { TYPE => $ti->{DATA_TYPE} } ); + + $ti = DBD_TEST::get_type_for_column( $dbh,'C'); + $sth->bind_param( 3, $_->[ 2], { TYPE => $ti->{DATA_TYPE} } ); + + $ti = DBD_TEST::get_type_for_column( $dbh,'D'); + my $i = ( $ti->{DATA_TYPE} == DBI::SQL_TYPE_DATE || $ti->{DATA_TYPE} == DBI::SQL_DATE ) ? 3 : 4; + $sth->bind_param( 4, $_->[$i], { TYPE => $ti->{DATA_TYPE} } ); + + return 0 unless $sth->execute; + } + 1; +}