DBIO-SQLite
view release on metacpan or search on metacpan
t/resultset/update_delete.t view on Meta::CPAN
my $rs = $schema->resultset('FourKeys_to_TwoKeys')->search (
{
-or => [
{ 'me.pilot_sequence' => 12 },
{ 'me.autopilot' => 'b' },
],
}
);
lives_ok { $rs->update({ autopilot => 'z' }) }
'Update with table name qualifier in -or conditions lives';
is_deeply (
[ $tkfks->search ({ pilot_sequence => [12, 22]})
->get_column ('autopilot')->all
],
[qw/z z/],
'... and yields the right data',
);
}
$sub_rs->delete;
is ($tkfks->count, $tkfk_cnt -= 2, 'Only two rows deleted');
# make sure limit-only deletion works
cmp_ok ($tkfk_cnt, '>', 1, 'More than 1 row left');
$tkfks->search ({}, { rows => 1 })->delete;
is ($tkfks->count, $tkfk_cnt -= 1, 'Only one row deleted');
# check with sql-equality, as sqlite will accept most bad sql just fine
{
my $rs = $schema->resultset('CD')->search(
{ 'me.year' => { '!=' => 2010 } },
);
$schema->is_executed_sql_bind( sub {
$rs->search({}, { join => 'liner_notes' })->delete;
}, [[
'DELETE FROM "cd" WHERE ( "year" != ? )',
2010,
]], 'Non-restricting multijoins properly thrown out' );
$schema->is_executed_sql_bind( sub {
$rs->search({}, { prefetch => 'liner_notes' })->delete;
}, [[
'DELETE FROM "cd" WHERE ( "year" != ? )',
2010,
]], 'Non-restricting multiprefetch thrown out' );
$schema->is_executed_sql_bind( sub {
$rs->search({}, { prefetch => 'artist' })->delete;
}, [[
'DELETE FROM "cd" WHERE ( "cdid" IN ( SELECT "me"."cdid" FROM "cd" "me" JOIN "artist" "artist" ON "artist"."artistid" = "me"."artist" WHERE ( "me"."year" != ? ) ) )',
2010,
]], 'Restricting prefetch left in, selector thrown out');
### switch artist and cd to fully qualified table names
### make sure nothing is stripped out
my $cd_rsrc = $schema->source('CD');
$cd_rsrc->name('main.cd');
$cd_rsrc->relationship_info($_)->{attrs}{cascade_delete} = 0
for $cd_rsrc->relationships;
my $art_rsrc = $schema->source('Artist');
$art_rsrc->name(\'main.artist');
$art_rsrc->relationship_info($_)->{attrs}{cascade_delete} = 0
for $art_rsrc->relationships;
$schema->is_executed_sql_bind( sub {
$rs->delete
}, [[
'DELETE FROM "main"."cd" WHERE "year" != ?',
2010,
]], 'delete with fully qualified table name' );
$rs->create({ title => 'foo', artist => 1, year => 2000 });
$schema->is_executed_sql_bind( sub {
$rs->delete_all
}, [
[ 'BEGIN' ],
[
'SELECT "me"."cdid", "me"."artist", "me"."title", "me"."year", "me"."genreid", "me"."single_track" FROM "main"."cd" "me" WHERE "me"."year" != ?',
2010,
],
[
'DELETE FROM "main"."cd" WHERE ( "cdid" = ? )',
1,
],
[ 'COMMIT' ],
], 'delete_all with fully qualified table name' );
$rs->create({ cdid => 42, title => 'foo', artist => 2, year => 2000 });
my $cd42 = $rs->find(42);
$schema->is_executed_sql_bind( sub {
$cd42->delete
}, [[
'DELETE FROM "main"."cd" WHERE "cdid" = ?',
42,
]], 'delete of object from table with fully qualified name' );
$schema->is_executed_sql_bind( sub {
$cd42->related_resultset('artist')->delete
}, [[
'DELETE FROM main.artist WHERE "artistid" IN ( SELECT "me"."artistid" FROM main.artist "me" WHERE "me"."artistid" = ? )',
2,
]], 'delete of related object from scalarref fully qualified named table' );
my $art3 = $schema->resultset('Artist')->find(3);
$schema->is_executed_sql_bind( sub {
$art3->related_resultset('cds')->delete;
}, [[
'DELETE FROM "main"."cd" WHERE "artist" = ?',
3,
]], 'delete of related object from fully qualified named table' );
$schema->is_executed_sql_bind( sub {
$art3->cds_unordered->delete;
}, [[
'DELETE FROM "main"."cd" WHERE "artist" = ?',
3,
]], 'delete of related object from fully qualified named table via relaccessor' );
$schema->is_executed_sql_bind( sub {
$rs->search({}, { prefetch => 'artist' })->delete;
( run in 1.334 second using v1.01-cache-2.11-cpan-7fcb06a456a )