DBIx-Class
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 0.726 second using v1.01-cache-2.11-cpan-d8267643d1d )