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 )