| Fey-ORM documentation | Contained in the Fey-ORM distribution. |
Fey::Meta::Method::FromSelect - A method metaclass for SELECT-based methods
version 0.43
package MyApp::Song;
query average_rating => (
select => $select,
bind_params => sub { $_[0]->song_id() },
);
This method metaclass allows you to generate a method based on a SELECT
query and an optional bind_params subroutine reference.
This metaclass accepts two additional parameters in addition to the normal Moose method options.
This must do the Fey::Role::SQL::ReturnsData role. It is required.
This must be a subroutine reference, which when called will return an array of bind parameters for the query. This subref will be called as a method on the object which has the method. This is an optional parameter.
Note that this metaclass overrides any value you provide for "default" with a subroutine that executes the query and gets the value it returns.
This class adds a few methods to those provided by
Moose::Meta::Attribute:
Returns the query object associated with this attribute.
Returns the bind_params subroutine reference associated with this attribute, if any.
The generated method will use DBI's selectcol_arrayref() method to fetch
data from the database. If called in a list context, it returns all the values
it retrieves. In scalar context, it returns just the first value.
Dave Rolsky <autarch@urth.org>
This software is copyright (c) 2011 by Dave Rolsky.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| Fey-ORM documentation | Contained in the Fey-ORM distribution. |
package Fey::Meta::Method::FromSelect; BEGIN { $Fey::Meta::Method::FromSelect::VERSION = '0.43'; } use strict; use warnings; use namespace::autoclean; use Moose; extends 'Moose::Meta::Method', 'Class::MOP::Method::Generated'; with 'Fey::Meta::Role::FromSelect'; sub new { my $class = shift; my %options = @_; ( $options{package_name} && $options{name} ) || confess "You must supply the package_name and name parameters $Class::MOP::Method::UPGRADE_ERROR_TEXT"; $options{select} || confess 'You must supply a select query'; my $self = $class->_new( \%options ); $self->_initialize_body; return $self; } sub _new { my $class = shift; my $options = @_ == 1 ? $_[0] : {@_}; return bless $options, $class; } sub _initialize_body { my $self = shift; $self->{body} = $self->_make_sub_from_select( $self->select(), $self->bind_params(), $self->is_multi_column(), ); } __PACKAGE__->meta()->make_immutable( inline_constructor => 0 ); 1; # ABSTRACT: A method metaclass for SELECT-based methods
__END__