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 )