Geoffrey
view release on metacpan or search on metacpan
lib/Geoffrey/Action/Column.pm view on Meta::CPAN
package Geoffrey::Action::Column;
use utf8;
use 5.016;
use strict;
use warnings;
$Geoffrey::Action::Column::VERSION = '0.000206';
use parent 'Geoffrey::Role::Action';
sub add {
my ($self, $hr_params, $constraint) = @_;
require Ref::Util;
if (!Ref::Util::is_hashref($hr_params)) {
require Geoffrey::Exception::General;
Geoffrey::Exception::General::throw_wrong_ref(__PACKAGE__ . '::add', 'hash');
}
return $self->appending($hr_params->{table}, $hr_params, $constraint) if $self->for_table;
my $tables = $self->converter->table;
if (!$tables || !$tables->can('add_column')) {
require Geoffrey::Exception::NotSupportedException;
Geoffrey::Exception::NotSupportedException::throw_column('add', $self->converter);
}
if (defined $hr_params->{primarykey}) {
require Geoffrey::Exception::RequiredValue;
Geoffrey::Exception::RequiredValue::throw_column_default($hr_params->{table},
$hr_params->{name});
}
require Geoffrey::Utils;
my $sql = Geoffrey::Utils::replace_spare(
$tables->add_column,
[
$hr_params->{table},
(
join q/ /,
(
$hr_params->{name}, $self->converter()->type($hr_params),
$constraint // (), $self->defaults($hr_params) // ()))]);
return $self->do($sql);
}
sub drop {
my ($self, $hr_params) = @_;
require Ref::Util;
if (!Ref::Util::is_hashref($hr_params)) {
require Geoffrey::Exception::General;
Geoffrey::Exception::General::throw_wrong_ref(__PACKAGE__ . '::drop', 'hash');
}
my $table = $self->converter->table;
if (!$table || !$table->can('drop_column')) {
require Geoffrey::Exception::NotSupportedException;
Geoffrey::Exception::NotSupportedException::throw_column('drop', $self->converter);
}
require Geoffrey::Utils;
return [
map {
$self->do(
Geoffrey::Utils::replace_spare($table->drop_column, [$hr_params->{table}, $_]))
} @{$hr_params->{dropcolumn}}];
}
sub list_from_schema {
my ($self, $schema, $table) = @_;
my $converter = $self->converter;
return $converter->colums_information(
$self->do_arrayref($converter->table->s_list_columns($schema), [$table]));
}
sub appending {
my ($self, $s_table_name, $hr_params, $constraint) = @_;
my $b_primarykey = (defined $hr_params->{primarykey}) ? 1 : 0;
my $b_has_value = (exists $hr_params->{default} || exists $hr_params->{foreignkey}) ? 1 : 0;
if ($b_primarykey && !$b_has_value) {
require Geoffrey::Exception::RequiredValue;
Geoffrey::Exception::RequiredValue::throw_column_default($s_table_name, $hr_params->{name});
}
return join q/ /,
(
$hr_params->{name}, $self->converter()->type($hr_params),
$constraint, $self->defaults($hr_params),
);
}
sub defaults {
my ($self, $params) = @_;
return () if !defined $params->{default};
my $defaults = $self->converter()->defaults;
my $default_by_key = $defaults->{$params->{default}};
unless ($default_by_key) {
return 'DEFAULT ' . $params->{default} if $params->{default} eq q/''/;
return 'DEFAULT ' . $self->converter()->convert_defaults($params);
}
if ($params->{default} eq 'autoincrement') {
return $self->sequences->add($params) if $defaults->{$params->{default}} eq 'sequence';
return $defaults->{$params->{default}};
}
elsif (defined $defaults->{$params->{default}}) {
return 'DEFAULT ' . $defaults->{$params->{default}};
}
return ();
}
1;
( run in 1.394 second using v1.01-cache-2.11-cpan-98e64b0badf )