DBIx::Class::ResultSet::Void - improve DBIx::Class::ResultSet with void context
version 0.06
my $rs = $schema->resultset('CD'); $rs->find_or_create( { artist => 'Massive Attack', title => 'Mezzanine', } );
As ResultSet subclass in Schema.pm:
__PACKAGE__->load_namespaces( default_resultset_class => '+DBIx::Class::ResultSet::Void' );
Or in Schema/CD.pm
__PACKAGE__->resultset_class('DBIx::Class::ResultSet::Void');
Or in ResultSet/CD.pm
use base 'DBIx::Class::ResultSet::Void';
The API is the same as DBIx::Class::ResultSet.
use exists instead of find unless defined wantarray.
exists
find
(Thank ribasushi to tell me count is bad)
count
$rs->exists( { id => 1 } );
It works like:
$rs->search( { id => 1 }, { rows => 1, select => [1] } )->single;
It is a little faster than count if you don't care the real count.
find_or_create
"find_or_create" in DBIx::Class::ResultSet:
$rs->find_or_create( { id => 1, name => 'A' } );
produces SQLs like:
# SELECT me.id, me.name FROM item me WHERE ( me.id = ? ): '1' # INSERT INTO item ( id, name) VALUES ( ?, ? ): '1', 'A'
but indeed SELECT 1 ... LIMIT 1 is performing a little better than me.id, me.name
SELECT 1 ... LIMIT 1
this module DBIx::Class::ResultSet::Void produces SQLs like:
# SELECT 1 FROM item me WHERE ( me.id = ? ) LIMIT 1: '1' # INSERT INTO item ( id, name) VALUES ( ?, ? ): '1', 'A'
we would delegate it DBIx::Class::ResultSet under context like:
my $row = $rs->find_or_create( { id => 1, name => 'A' } );
update_or_create
"update_or_create" in DBIx::Class::ResultSet:
$rs->update_or_create( { id => 1, name => 'B' } );
# SELECT me.id, me.name FROM item me WHERE ( me.id = ? ): '1' # UPDATE item SET name = ? WHERE ( id = ? ): 'B', '1'
this module:
# SELECT 1 FROM item me WHERE ( me.id = ? ) LIMIT 1: '1' # UPDATE item SET name = ? WHERE ( id = ? ): 'B', '1'
Fayland Lam <fayland@gmail.com>
This software is copyright (c) 2009 by Fayland Lam.
This is free software; you can redistribute it and/or modify it under the same terms as perl itself.
To install DBIx::Class::ResultSet::Void, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DBIx::Class::ResultSet::Void
CPAN shell
perl -MCPAN -e shell install DBIx::Class::ResultSet::Void
For more information on module installation, please visit the detailed CPAN module installation guide.