Geoffrey-Changelog-Database
view release on metacpan or search on metacpan
lib/Geoffrey/Changelog/Database.pm view on Meta::CPAN
columns => $self->_changlog_entries_table,
schema => $self->schema,
});
}
sub file_extension { return $_[0]->{file_extension}; }
sub _get_changeset_entries {
my ($self, $hr_unhandeled_changelog) = @_;
my $s_table_name = ($self->schema ? $self->schema . q/./ : q//) . $self->_changlog_entries_table_name;
my $s_entries_sql = $self->_sql_abstract->select($s_table_name, qw/*/, {geoffrey_changelog => {'=', '?'}});
my $ar_entries = $self->dbh->selectall_arrayref($s_entries_sql, {Slice => {}}, ($hr_unhandeled_changelog->{ID}))
|| Geoffrey::Exception::Database::throw_sql_handle($!, $s_entries_sql);
return $ar_entries;
}
sub load {
my ($self, $s_changeset_id) = @_;
my $ar_changesets = $self->_get_changesets($s_changeset_id ? ({changeset_id => $s_changeset_id}) : ());
$_->{entries} = $self->_get_changeset_entries($_) for @{$ar_changesets};
require Geoffrey::Utils;
Geoffrey::Utils::to_lowercase($_) for @{$ar_changesets};
return ($s_changeset_id && scalar @{$ar_changesets} == 1) ? $ar_changesets->[0] : $ar_changesets;
}
sub load_changeset {
my ($self, $s_changeset_id) = @_;
my $ar_changesets = $self->_get_changesets({changeset_id => $s_changeset_id});
$_->{entries} = $self->_get_changeset_entries($_) for @{$ar_changesets};
require Geoffrey::Utils;
Geoffrey::Utils::to_lowercase($_) for @{$ar_changesets};
return ($s_changeset_id && scalar @{$ar_changesets} == 1) ? $ar_changesets->[0] : $ar_changesets;
}
sub write {
my ($self, $s_file, $ur_data) = @_;
return shift->insert(@_);
}
sub delete {
my ($self, $s_changeset_id) = @_;
my $ar_changesets = $self->_get_changesets({changeset_id => $s_changeset_id, not_executed => 1});
return unless scalar @{$ar_changesets};
my @a_statements = ();
push @a_statements,
$self->_action_entry->drop({
schema => $self->schema,
table => $self->_changlog_entries_table_name,
conditions => {geoffrey_changelog => $s_changeset_id,}});
push @a_statements,
$self->_action_entry->drop(
{schema => $self->schema, table => $self->geoffrey_changelogs, conditions => {id => $s_changeset_id,}});
return \@a_statements;
}
sub insert {
my ($self, $s_file, $ur_data) = @_;
$self->_prepare_tables;
require Ref::Util;
return $self->{generated_sql} if Ref::Util::is_hashref($ur_data);
for my $hr_changeset (@{$ur_data}) {
next unless (exists $hr_changeset->{id});
next unless scalar @{$hr_changeset->{entries}};
push(
@{$self->{generated_sql}},
$self->_action_entry->add({
schema => $self->schema,
table => $self->geoffrey_changelogs,
values => [{
id => $hr_changeset->{id},
filename => __PACKAGE__ . '::' . __LINE__,
created_by => $hr_changeset->{created_by} ? $hr_changeset->{created_by}
: $hr_changeset->{author} ? $hr_changeset->{author}
: undef,
geoffrey_version => $Geoffrey::Changelog::Database::VERSION,
($hr_changeset->{comment} ? (comment => $hr_changeset->{comment}) : ()),
}]}));
for my $hr_entry (@{$hr_changeset->{entries}}) {
push(
@{$self->{generated_sql}},
$self->_action_entry->add({
schema => $self->schema,
table => $self->_changlog_entries_table_name,
values => [{
geoffrey_changelog => $hr_changeset->{id},
action => $hr_entry->{action},
name => $hr_entry->{entry_name},
(exists $hr_entry->{as} ? (plain_sql => $hr_entry->{as}) : ()),
}]}));
}
}
return $self->{generated_sql};
}
## GETTER / SETTER
sub schema {
my ($self, $s_schema) = @_;
$self->{schema} = $s_schema if $s_schema;
return $self->{schema};
}
sub converter {
my ($self, $o_converter) = @_;
$self->{converter} = $o_converter if $o_converter;
return $self->{converter};
}
sub dbh {
my ($self, $o_dbh) = @_;
$self->{dbh} = $o_dbh if $o_dbh;
return $self->{dbh};
}
sub geoffrey_changelogs {
my ($self, $s_geoffrey_changelogs) = @_;
$self->{geoffrey_changelogs} = $s_geoffrey_changelogs if $s_geoffrey_changelogs;
$self->{geoffrey_changelogs} //= 'geoffrey_changelogs';
( run in 0.596 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )