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 )