Crop-Config
view release on metacpan or search on metacpan
lib/Crop/Object/Warehouse/Pg.pm view on Meta::CPAN
package Crop::Object::Warehouse::Pg;
use base qw/ Crop::Object::Warehouse /;
=begin nd
Class: Crop::Object::Warehouse::Pg
General Postgres driver.
Attribute 'dbi' keeps a connection to db.
=cut
use v5.14;
use warnings;
no warnings 'experimental::smartmatch';
use Crop::Error;
use Crop::Util;
use Crop::Object::Warehouse::Agent::DBI;
use Crop::Object::Constants;
use Crop::Object::Warehouse::Lang::SQL::Query::Select;
use Crop::Object::Warehouse::Lang::SQL::Query::Insert;
use Crop::Object::Warehouse::Lang::SQL::Query::Delete;
use Crop::Object::Warehouse::Lang::SQL::Query::Update;
use Crop::Debug;
=begin nd
Constant: KEYWORDS
Key words for build query to a database.
=cut
use constant { KEYWORDS => [qw/ EXT LIMIT LOCK OFFSET ORDER SLICEN SORT /] };
=begin nd
Constructor: new ($conn)
Establish connection to a specified database.
Parameters:
$conn - credentials for database connection (login, pass, etc.)
Returns:
$self - if OK
undef - if connection to database fails
=cut
sub new {
my ($class, @conn) = @_;
my $self = bless {
dbi => undef,
}, $class;
$self->{dbi} = Crop::Object::Warehouse::Agent::DBI->new(@conn);
$self;
}
=begin nd
Method: all ($object, @filter)
Get all exemplars that match the @filter clause.
Parameters:
$object - class name of objects
@filter - complex clause contains WHERE, ORDER BY, and EXT tokens
Returns:
collection of objects - if ok
undef - otherwise
=cut
sub all {
my ($self, $object, @filter) = @_;
my $in = {@filter};
my $class = ref $self || $self;
for my $field (keys %{$in}) {
next if $field ~~ KEYWORDS;
for (split ' OR ', $field) {
return warn "OBJECT|ALERT: Unknown attribute: $object.$_" unless $object->Attributes->have(STORED, $_);
}
}
if (exists $in->{SORT}) {
$in->{ORDER} = delete $in->{SORT};
$in->{ORDER} = [$in->{ORDER}] unless ref $in->{ORDER};
}
my %clause = %$in;
my $ext = delete $clause{EXT};
my $sort = delete $clause{ORDER};
my $limit = delete $clause{LIMIT};
my $offset = delete $clause{OFFSET};
# my %key;
my $q = Crop::Object::Warehouse::Lang::SQL::Query::Select->new(
start_class => $object,
clause => \%clause,
order => $sort,
( run in 0.905 second using v1.01-cache-2.11-cpan-39bf76dae61 )