From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

sub new { bless {}, shift }
sub all { ActiveRecord::Simple::Find->new(shift->{caller})->fetch }
sub get { ActiveRecord::Simple::Find->new(shift->{caller}, @_)->fetch }
sub find { ActiveRecord::Simple::Find->new(shift->{caller}, @_) }
sub sql_fetch_all {
my ($self, $sql, @bind) = @_;
my $data = $self->{caller}->dbh->selectall_arrayref($sql, { Slice => {} }, @bind);
my @list;
for my $row (@$data) {
$self->{caller}->_mk_ro_accessors([keys %$row]);
bless $row, $self->{caller};
push @list, $row;
}
return \@list;
}
sub sql_fetch_row {
my ($self, $sql, @bind) = @_;
my $row = $self->{caller}->dbh->selectrow_hashref($sql, undef, @bind);
$self->{caller}->_mk_ro_accessors([keys %$row]);
bless $row, $self->{caller};
return $row;
}
1;
__END__;
=head1 NAME
ActiveRecord::Simple::QueryManager - query manager for ActiveRecord classes
=head1 DESCRIPTION
Query manager for ActiveRecord classes.
=head1 SYNOPSIS
my $qm = ActiveRecord::Simple::QueryManager->new;
$qm->{caller} = 'User';
my @users = $qm->all(); # SELECT * FROM user;
my @johns = $qm->find({ name => 'John' })->fetch;
=head2 sql_fetch_all
Execute any SQL code and fetch data. Returns list of objects. Accessors for all not specified fields
will be created as read-only.
my @values = Purchase->sql_fetch_all('SELECT id, amount FROM purchase WHERE amount > ?', 100);
print $_->id, " ", $_->amount for, "\n" @values;
=head2 sql_fetch_row
Execute any SQL and fetch data. Returns an object.
my $customer = Customer->sql_fetch_row('SELECT id, name FORM customer WHERE id = ?', 1);
print $customer->name, "\n";
=head2 find
Returns L<ActiveRecord::Simple::Find> object.
my $finder = Customer->find(); # it's like ActiveRecord::Simple::Find->new();
$finder->order_by('id');
my @customers = $finder->fetch;
=head2 all
Same as __PACKAGE__->find->fetch;
=head2 get
Get object by primary_key
my $customer = Customer->get(1);
# same as Customer->find({ id => 1 })->fetch;