The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Mock::Basic::Schema;
use DBIx::Skinny::Schema;
use DBIx::Skinny::Schema::ProxyTableRule;

install_table 'access_log' => schema {
    proxy_table_rule 'strftime', 'access_log_%Y%m';

    pk 'id';
    columns qw/
        id
        accessed_on
        count
    /;
};

install_table 'error_log' => schema {
    proxy_table_rule 'sprintf', 'error_log_%s';

    pk 'id';
    columns qw/
        id
        errored_on
        count
    /;
};

install_table 'hogehoge_log' => schema {
    proxy_table_rule 'named_strftime', 'hogehoge_log_%Y%m', 'hogehoged_on';

    pk 'id';
    columns qw/
        id
        hogehoged_on
        count
    /;
};

install_table 'fugafuga_log' => schema {
    proxy_table_rule('keyword', 'fugafuga_log_<%04d:year><%02d:month>');

    pk 'id';
    columns qw/
        id
        hogehoged_on
        count
    /;
};

sub ranking_rule {
    my ($base, $type,) = @_;
    if ( $type !~ /^(daily|weekly|monthly)$/ ) {
        die "invalid type";
    }
    return "${base}_${type}";
}

install_table 'ranking' => schema {
    proxy_table_rule \&ranking_rule, "ranking";

    pk 'id';
    columns qw/
        id
        rank
        count
        ranked_on
    /;
};

1;