Aniki
view release on metacpan or search on metacpan
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to humanity, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively convey
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.
lib/Aniki.pm view on Meta::CPAN
local $Carp::CarpLevel = $Carp::CarpLevel + 1;
my ($sql, @bind) = $self->query_builder->select($table_name, $columns, $where, $opt);
return $self->select_by_sql($sql, \@bind, {
%$opt,
table_name => $table_name,
columns => $columns,
});
}
sub fetch_and_attach_relay_data {
my ($self, $table_name, $prefetch, $rows) = @_;
return unless @$rows;
$prefetch = [$prefetch] if ref $prefetch eq 'HASH';
my $relationships = $self->schema->get_table($table_name)->get_relationships;
for my $key (@$prefetch) {
if (ref $key && ref $key eq 'HASH') {
my %prefetch = %$key;
for my $key (keys %prefetch) {
$self->_fetch_and_attach_relay_data($relationships, $rows, $key, $prefetch{$key});
}
}
else {
$self->_fetch_and_attach_relay_data($relationships, $rows, $key, []);
}
}
}
sub _fetch_and_attach_relay_data {
my ($self, $relationships, $rows, $key, $prefetch) = @_;
my $relationship = $relationships->get($key);
unless ($relationship) {
croak "'$key' is not defined as relationship. (maybe possible typo?)";
}
$relationship->fetcher->execute($self, $rows, $prefetch);
}
sub select_named {
my ($self, $sql, $bind, $opt) = @_;
lib/Aniki.pm view on Meta::CPAN
my $columns = exists $opt->{columns} ? $opt->{columns} : undef;
my $prefetch = exists $opt->{prefetch} ? $opt->{prefetch} : [];
$prefetch = [$prefetch] if ref $prefetch eq 'HASH';
my $prefetch_enabled_fg = @$prefetch && !$self->suppress_row_objects && defined wantarray;
if ($prefetch_enabled_fg) {
my $txn; $txn = $self->txn_scope(caller => [caller]) unless $self->in_txn;
my $sth = $self->execute($sql, @$bind);
my $result = $self->_fetch_by_sth($sth, $table_name, $columns);
$self->fetch_and_attach_relay_data($table_name, $prefetch, $result->rows);
$txn->rollback if defined $txn; ## for read only
return $result;
}
my $sth = $self->execute($sql, @$bind);
# When the return value is never used, should not create object
# case example: use `FOR UPDATE` query for global locking
unless (defined wantarray) {
lib/Aniki/Plugin/SelectJoined.pm view on Meta::CPAN
if ($prefetch_enabled_fg) {
my $txn; $txn = $self->txn_scope unless $self->txn_manager->in_transaction;
my $sth = $self->execute($sql, @$bind);
my $result = $self->_fetch_joined_by_sth($sth, $table_names, $columns);
for my $table_name (@$table_names) {
my $rows = $result->rows($table_name);
my $prefetch = $prefetch->{$table_name};
$prefetch = [$prefetch] if ref $prefetch eq 'HASH';
$self->fetch_and_attach_relay_data($table_name, $prefetch, $rows);
}
$txn->rollback if defined $txn; ## for read only
return $result;
}
else {
my $sth = $self->execute($sql, @$bind);
return $self->_fetch_joined_by_sth($sth, $table_names, $columns);
}
}
lib/Aniki/Row.pm view on Meta::CPAN
}
my $relay_data = $self->relay_data->{$key};
return unless defined $relay_data;
return wantarray ? @$relay_data : $relay_data if ref $relay_data eq 'ARRAY';
return $relay_data;
}
sub relay_fetch {
my ($self, $key) = @_;
$self->handler->fetch_and_attach_relay_data($self->table_name, [$key], [$self]);
return $self->relay_data->{$key};
}
sub is_prefetched {
my ($self, $key) = @_;
return exists $self->relay_data->{$key};
}
sub get_column {
my ($self, $column) = @_;
( run in 1.140 second using v1.01-cache-2.11-cpan-e1769b4cff6 )