App-rimetadb
view release on metacpan or search on metacpan
lib/App/rimetadb.pm view on Meta::CPAN
my %num_occurences;
while (my $row = $sth->fetchrow_hashref) {
my $meta = _json->decode($row->{metadata});
my $args = $meta->{args} // {};
for (keys %$args) {
$num_occurences{$_}++;
}
}
for (sort keys %num_occurences) {
push @rows, {name=>$_, num_occurences=>$num_occurences{$_}};
}
#unless ($args{detail}) {
# @rows = map {$_->{name}} @rows;
#}
my @columns = qw(name num_occurences);
[200, "OK", \@rows, {'table.fields'=>\@columns}];
}
$SPEC{meta} = {
v => 1.1,
summary => 'Get package/function metadata from the database',
args => {
%args_common,
name => {
summary => '(Fully-qualified) function name or package name',
schema => ['perl::modname'],
req => 1,
pos => 0,
completion => \&_complete_fqfunc_or_package,
},
},
};
sub meta {
my %args = @_;
my ($res, $dbh) = _connect_db(\%args);
return $res unless $res->[0] == 200;
my $name = $args{name};
# try function metadata first
{
my ($package, $func) = $name =~ /(.+)::(.+)/
or last;
my ($row) = $dbh->selectrow_hashref(
"SELECT metadata FROM function WHERE package=? AND name=?", {},
$package, $func)
or last;
return [200, "OK (func meta)", $row->{metadata}];
}
# try package metadata
my ($row) = $dbh->selectrow_hashref(
"SELECT metadata FROM package WHERE name=?", {}, $name)
or return [404, "Can't find function or package with that name"];
[200, "OK (package meta)", $row->{metadata}];
}
1;
# ABSTRACT: Manage a Rinci metadata database
__END__
=pod
=encoding UTF-8
=head1 NAME
App::rimetadb - Manage a Rinci metadata database
=head1 VERSION
This document describes version 0.226 of App::rimetadb (from Perl distribution App-rimetadb), released on 2023-07-09.
=head1 SYNOPSIS
See the included CLI script L<rimetadb>.
=head1 FUNCTIONS
=head2 argument_stats
Usage:
argument_stats(%args) -> [$status_code, $reason, $payload, \%result_meta]
Show statistics on function arguments from the database.
This function is not exported.
Arguments ('*' denotes required arguments):
=over 4
=item * B<dsn> => I<str>
DBI connection DSN.
If not specified, will default to C<dbd:SQLite:$HOME/rimeta.db> where C<$HOME> is
user's home directory.
Note: has been tested with MySQL and SQLite only.
=item * B<password> => I<str>
DBI connection password.
=item * B<user> => I<str>
DBI connection user.
( run in 1.496 second using v1.01-cache-2.11-cpan-5735350b133 )