diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2012-09-24 10:15:50 +0000 |
---|---|---|
committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-09-26 13:46:46 +0000 |
commit | 485b97be9f2f2abf5a40923b5fd85f75714a8c02 (patch) | |
tree | ca05cb0ecf3828d909a898c3e5805804a0aff5f8 /t/09_create_function.t | |
download | perl-dbd-sqlite-tarball-baserock/morph.tar.gz |
Imported from /srv/lorry/lorry-area/perl-dbd-sqlite-tarball/DBD-SQLite-1.38_01.tar.gz.HEADDBD-SQLite-1.38_01masterbaserock/morph
Diffstat (limited to 't/09_create_function.t')
-rw-r--r-- | t/09_create_function.t | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/t/09_create_function.t b/t/09_create_function.t new file mode 100644 index 0000000..a868b5b --- /dev/null +++ b/t/09_create_function.t @@ -0,0 +1,130 @@ +#!/usr/bin/perl + +use 5.00503; +use strict; +BEGIN { + $| = 1; + $^W = 1; +} + +use t::lib::Test qw/connect_ok @CALL_FUNCS/; +use Test::More; +use Test::NoWarnings; + +plan tests => 29 * @CALL_FUNCS + 1; + +sub now { + return time(); +} + +sub add2 { + my ( $a, $b ) = @_; + return $a + $b; +} + +sub my_sum { + my $sum = 0; + foreach my $x (@_) { + $sum += $x; + } + return $sum; +} + +sub error { + die "function is dying: ", @_, "\n"; +} + +sub void_return { +} + +sub return2 { + return ( 1, 2 ); +} + +sub return_null { + return undef; +} + +sub my_defined { + defined($_[0]) ? 1 : 0; +} + +sub noop { + return $_[0]; +} + +foreach my $call_func (@CALL_FUNCS) { + my $dbh = connect_ok( PrintError => 0 ); + + ok($dbh->$call_func( "now", 0, \&now, "create_function" )); + my $result = $dbh->selectrow_arrayref( "SELECT now()" ); + + ok( $result->[0], 'Got a result' ); + + $dbh->do( 'CREATE TEMP TABLE func_test ( a, b )' ); + $dbh->do( 'INSERT INTO func_test VALUES ( 1, 3 )' ); + $dbh->do( 'INSERT INTO func_test VALUES ( 0, 4 )' ); + + ok($dbh->$call_func( "add2", 2, \&add2, "create_function" )); + $result = $dbh->selectrow_arrayref( "SELECT add2(1,3)" ); + is($result->[0], 4, "SELECT add2(1,3)" ); + + $result = $dbh->selectall_arrayref( "SELECT add2(a,b) FROM func_test" ); + is_deeply( $result, [ [4], [4] ], "SELECT add2(a,b) FROM func_test" ); + + ok($dbh->$call_func( "my_sum", -1, \&my_sum, "create_function" )); + $result = $dbh->selectrow_arrayref( "SELECT my_sum( '2', 3, 4, '5')" ); + is( $result->[0], 14, "SELECT my_sum( '2', 3, 4, '5')" ); + + ok($dbh->$call_func( "error", -1, \&error, "create_function" )); + $result = $dbh->selectrow_arrayref( "SELECT error( 'I died' )" ); + ok( !$result ); + like( $DBI::errstr, qr/function is dying: I died/ ); + + ok($dbh->$call_func( "void_return", -1, \&void_return, "create_function" )); + $result = $dbh->selectrow_arrayref( "SELECT void_return( 'I died' )" ); + is_deeply( $result, [ undef ], "SELECT void_return( 'I died' )" ); + + ok($dbh->$call_func( "return_null", -1, \&return_null, "create_function" )); + $result = $dbh->selectrow_arrayref( "SELECT return_null()" ); + is_deeply( $result, [ undef ], "SELECT return_null()" ); + + ok($dbh->$call_func( "return2", -1, \&return2, "create_function" )); + $result = $dbh->selectrow_arrayref( "SELECT return2()" ); + is_deeply( $result, [ 2 ], "SELECT return2()" ); + + ok($dbh->$call_func( "my_defined", 1, \&my_defined, "create_function" )); + $result = $dbh->selectrow_arrayref( "SELECT my_defined(1)" ); + is_deeply( $result, [ 1 ], "SELECT my_defined(1)" ); + + $result = $dbh->selectrow_arrayref( "SELECT my_defined('')" ); + is_deeply( $result, [ 1 ], "SELECT my_defined('')" ); + + $result = $dbh->selectrow_arrayref( "SELECT my_defined('abc')" ); + is_deeply( $result, [ 1 ], "SELECT my_defined('abc')" ); + + $result = $dbh->selectrow_arrayref( "SELECT my_defined(NULL)" ); + is_deeply( $result, [ '0' ], "SELECT my_defined(NULL)" ); + + ok($dbh->$call_func( "noop", 1, \&noop, "create_function" )); + $result = $dbh->selectrow_arrayref( "SELECT noop(NULL)" ); + is_deeply( $result, [ undef ], "SELECT noop(NULL)" ); + + $result = $dbh->selectrow_arrayref( "SELECT noop(1)" ); + is_deeply( $result, [ 1 ], "SELECT noop(1)" ); + + $result = $dbh->selectrow_arrayref( "SELECT noop('')" ); + is_deeply( $result, [ '' ], "SELECT noop('')" ); + + $result = $dbh->selectrow_arrayref( "SELECT noop(1.0625)" ); + is_deeply( $result, [ 1.0625 ], "SELECT noop(1.0625)" ); + + # 2147483648 == 1<<31 + $result = $dbh->selectrow_arrayref( "SELECT noop(2147483648)" ); + is_deeply( $result, [ 2147483648 ], "SELECT noop(2147483648)" ); + + $result = $dbh->selectrow_arrayref( "SELECT typeof(noop(2147483648))" ); + is_deeply( $result, [ 'integer' ], "SELECT typeof(noop(2147483648))" ); + + $dbh->disconnect; +} |