CellBIS-SQL-Abstract
view release on metacpan or search on metacpan
lib/CellBIS/SQL/Abstract/Test.pm view on Meta::CPAN
$CellBIS::SQL::Abstract::Test::VERSION = '1.5';
use Mojo::Base -base;
use Carp 'croak';
use Mojo::Loader 'load_class';
use Mojo::Util qw(dumper);
use Mojo::Home;
use CellBIS::SQL::Abstract;
use CellBIS::SQL::Abstract::Test::Table;
has 'dsn';
has 'via';
has 'backend';
has 'table';
# internal purpose
has 'abstract';
has 'dir';
has home => sub {
state $home = Mojo::Home->new;
};
has table_info => sub {
state $table = CellBIS::SQL::Abstract::Test::Table->new;
};
sub create_table {
my $self = shift;
my $result = {result => 0, code => 400};
my $dbtype = $self->via;
my $table = $self->table;
my @table_info = $self->table_info->$table->$dbtype;
my $q = $self->abstract->create_table(@table_info);
if (my $dbh = $self->backend->db->query($q)) {
$result->{result} = $dbh->rows;
$result->{code} = 200;
}
return $result;
}
sub create_table_with_fk {
my $self = shift;
my ($result, $dbtype, $table_users, $table_roles, @table_info, $table, $q);
$result = {result => 0, code => 400};
$dbtype = $self->via;
$table = $self->table;
$table_users = $self->table_info->users;
$table_roles = $self->table_info->roles;
# table construction
@table_info = $self->table_info->$table->$dbtype;
push @table_info,
{
fk => {
name => 'users_roles_id',
col_name => $table_users->id_roles,
table_target => $table_roles->table_name,
col_target => $table_roles->id,
attr => {onupdate => 'cascade', ondelete => 'cascade'}
}
};
$q = $self->abstract->create_table(@table_info);
if (my $dbh = $self->backend->db->query($q)) {
$result->{result} = $dbh->rows;
$result->{code} = 200;
}
return $result;
}
sub check_table {
my $self = shift;
my ($result, $dbtype, $table_info, $table, @pre_q, $q);
$result = {result => 0, code => 400};
$dbtype = $self->via;
$table = $self->table;
$table_info = $self->table_info->$table;
@pre_q = (
'sqlite_master',
['name'],
{
where => 'type=\'table\' AND tbl_name=\''
. $table_info->table_name . '\''
}
) if $dbtype eq 'sqlite';
@pre_q = (
'information_schema.tables', ['table_name'],
{where => 'table_name=\'' . $table_info->table_name . '\''}
) if $dbtype eq 'mariadb';
@pre_q = (
'information_schema.tables',
['table_name'],
{
where =>
'table_type=\'BASE TABLE\' AND table_schema=\'public\' AND table_name=\''
. $table_info->table_name . '\''
}
) if $dbtype eq 'pg';
$q = $self->abstract->select(@pre_q);
if (my $dbh = $self->backend->db->query($q)) {
$result->{result} = $dbh->hash;
$result->{code} = 200;
}
return $result;
}
sub empty_table {
my $self = shift;
my ($result, $dbtype, $table, $table_info);
$dbtype = $self->via;
$table = $self->table;
$table_info = $self->table_info->$table;
$result = {result => 0, code => 500};
if (my $dbh
= $self->backend->db->query('DELETE FROM ' . $table_info->table_name))
( run in 1.441 second using v1.01-cache-2.11-cpan-99c4e6809bf )