Data-Model
view release on metacpan or search on metacpan
lib/Data/Model.pm view on Meta::CPAN
sub schema_names {
my $self = shift;
keys %{ $self->__properties->{schema} };
}
sub as_sqls {
my $self = shift;
my $target = shift;
my @sql = ();
for my $model ($self->schema_names) {
next if $target && $model ne $target;
push @sql, $self->get_schema($model)->sql->as_sql;
}
@sql;
}
## get / set / delete
sub _get_query_args {
my $self = shift;
my $schema = shift;
return [] unless exists $_[0];
# get key array or query
my $key_array = undef;
my $query = undef;
if (ref($_[0]) eq 'HASH') {
## ->get( modelname => { search query } );
$query = shift;
} elsif (ref($_[0]) eq 'ARRAY') {
## ->get( modelname => [ keys ]);
$key_array = shift;
} elsif (!ref($_[0])) {
## ->get( modelname => 'key');
$key_array = [ shift ];
} else {
return [];
}
# get query
if ($query) {
## nop
} elsif (ref($_[0]) eq 'HASH') {
## get query
$query = shift;
} else {
shift;
}
# for query param validation
if ($RUN_VALIDATION && $query) {
my @p = %{ $query };
validate(
@p, {
index => {
type => HASHREF | UNDEF,
optional => 1,
callbacks => {
has_index_name => sub {
return 1 unless $_[0];
return 0 unless scalar(@{ [ %{ $_[0] } ] }) == 2;
my($name) = %{ $_[0] };
$schema->has_index($name);
},
},
},
where => {
type => HASHREF | ARRAYREF | UNDEF,
optional => 1,
},
order => {
type => HASHREF | ARRAYREF | UNDEF,
optional => 1,
},
group => {
type => HASHREF | ARRAYREF | UNDEF,
optional => 1,
},
limit => {
type => SCALAR | UNDEF,
optional => 1,
},
offset => {
type => SCALAR | UNDEF,
optional => 1,
},
},
);
}
# if first key is undef then nothing keys
$key_array = [] if $key_array && ref($key_array) && !defined $key_array->[0];
# deflate search key
if ($schema->has_deflate) {
if ($key_array) {
my $columns = $schema->get_columns_hash_by_key_array_and_hash(+{}, $key_array);
$schema->deflate($columns);
$key_array = $schema->get_key_array_by_hash( $columns );
}
# deflate search index
if ($query && ref($query->{index}) eq 'HASH') {
my($name, $key_array) = ( %{ $query->{index} } );
$key_array = [ $key_array ] unless ref($key_array) eq 'ARRAY';
my $columns = $schema->get_columns_hash_by_key_array_and_hash(+{}, $key_array, $name);
$schema->deflate($columns);
$query->{index} = { $name => $schema->get_key_array_by_hash($columns, $name) };
}
}
return [] if ($key_array && !@{ $key_array });
return [] unless $key_array || $query;
return [ $key_array, $query, @_ ];
}
sub lookup {
( run in 0.468 second using v1.01-cache-2.11-cpan-39bf76dae61 )