1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
#!/usr/bin/perl -w
use strict;
use File::Spec;
use lib '.', File::Spec->catdir( File::Spec->curdir, 't', 'lib' );
use Alzabo::Test::Utils;
use Test::More;
use Alzabo::Create;
use Alzabo::Config;
use Alzabo::Runtime;
my @rdbms_names = Alzabo::Test::Utils->rdbms_names;
unless (@rdbms_names)
{
plan skip_all => 'no test config provided';
exit;
}
plan tests => 25;
Alzabo::Test::Utils->remove_all_schemas;
# doesn't matter which RDBMS is used
my $rdbms = $rdbms_names[0];
if ( $rdbms eq 'mysql' )
{
# prevent subroutine redefinition warnings
local $^W = 0;
eval 'use Alzabo::SQLMaker::MySQL qw(:all)';
}
elsif ( $rdbms eq 'pg' )
{
local $^W = 0;
eval 'use Alzabo::SQLMaker::PostgreSQL qw(:all)';
}
Alzabo::Test::Utils->make_schema($rdbms);
my $config = Alzabo::Test::Utils->test_config_for($rdbms);
my $s = Alzabo::Runtime::Schema->load_from_file( name => $config->{schema_name} );
$s->connect( Alzabo::Test::Utils->connect_params_for($rdbms) );
my $department = $s->table('department')->insert( values => { name => 'D 1' } );
my $dep_id = $department->select('department_id');
{
my $handle =
$s->table('employee')->insert_handle
( columns => [ $s->table('employee')->columns( 'name', 'dep_id' ) ] );
foreach my $name ( qw( Faye Jet Maggie ) )
{
my $row =
$handle->insert( values =>
{ name => $name,
dep_id => $dep_id,
}
);
ok( $row->select('employee_id'), 'row has an employee id' );
is( $row->select('name'), $name, "name is $name" );
is( $row->select('dep_id'), $dep_id, "dep_id is $dep_id" );
is( $row->select('smell'), 'grotesque', 'smell is default value' );
}
eval { $handle->insert( values =>
{ name => 'Dave',
dep_id => $dep_id,
smell => 'geeky',
}
) };
like( $@, qr/cannot provide a value.+\(smell\)/i, 'try to insert with a bad column' );
}
{
my $handle =
$s->table('employee')->insert_handle
( columns => [ $s->table('employee')->columns( 'name', 'dep_id' ) ],
values => { smell => LOWER('GOOD') },
);
my $row =
$handle->insert( values =>
{ name => 'Cecilia',
dep_id => $dep_id,
}
);
ok( $row->select('employee_id'), 'row has an employee id' );
is( $row->select('name'), 'Cecilia', "name is Cecilia" );
is( $row->select('dep_id'), $dep_id, "dep_id is $dep_id" );
is( $row->select('smell'), 'good', 'smell is "good"' );
}
{
my $handle =
$s->table('employee')->insert_handle
( columns => [ $s->table('employee')->columns( 'name', 'dep_id' ) ],
values => { smell => 'good' },
);
my $row =
$handle->insert( values =>
{ name => 'Cecilia',
dep_id => $dep_id,
}
);
ok( $row->select('employee_id'), 'row has an employee id' );
is( $row->select('name'), 'Cecilia', "name is Cecilia" );
is( $row->select('dep_id'), $dep_id, "dep_id is $dep_id" );
is( $row->select('smell'), 'good', 'smell is "good"' );
# override a static value
$row =
$handle->insert( values =>
{ name => 'Cecilia',
dep_id => $dep_id,
smell => 'great',
}
);
ok( $row->select('employee_id'), 'row has an employee id' );
is( $row->select('name'), 'Cecilia', "name is Cecilia" );
is( $row->select('dep_id'), $dep_id, "dep_id is $dep_id" );
is( $row->select('smell'), 'great', 'smell is "great"' );
}
|