DBIx-Class-AuditAny
view release on metacpan or search on metacpan
lib/DBIx/Class/AuditAny/Collector/AutoDBIC.pm view on Meta::CPAN
$no_accessor{$name} and $info->{accessor} = undef;
push @cols, ( $name => $info );
}
return @cols;
}
has 'schema_namespace_config', is => 'ro', isa => HashRef, init_arg => undef, lazy => 1,
default => sub {
my $self = shift;
my $ColumnName = $self->AuditObj->get_datapoint_orig('column_name');
my $col_context_uniq_const = $ColumnName ?
[ add_unique_constraint => ["change_id", ["change_id", $ColumnName->name]] ] : [];
my $namespace = $self->target_schema_namespace;
return {
schema_namespace => $namespace,
results => {
$self->deploy_info_source_name => {
table_name => $self->deploy_info_table_name,
columns => [
md5 => {
data_type => "char",
is_nullable => 0,
size => 32
},
comment => {
data_type => "varchar",
is_nullable => 0,
size => 255
},
deployed_ddl => {
data_type => 'mediumtext',
is_nullable => 0
},
deployed_ts => {
data_type => "datetime",
datetime_undef_if_invalid => 1,
is_nullable => 0
},
auditany_params => {
data_type => 'mediumtext',
is_nullable => 0
},
],
call_class_methods => [
set_primary_key => ['md5'],
]
},
$self->changeset_source_name => {
table_name => $self->changeset_table_name,
columns => $self->changeset_columns,
call_class_methods => [
set_primary_key => ['id'],
has_many => [
$self->change_data_rel,
$namespace . '::' . $self->change_source_name,
{ "foreign.changeset_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
]
]
},
$self->change_source_name => {
table_name => $self->change_table_name,
columns => $self->change_columns,
call_class_methods => [
set_primary_key => ['id'],
belongs_to => [
$self->reverse_changeset_data_rel,
$namespace . '::' . $self->changeset_source_name,
{ id => "changeset_id" },
{ is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
],
has_many => [
$self->column_data_rel,
$namespace . '::' . $self->column_change_source_name,
{ "foreign.change_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
]
]
},
$self->column_change_source_name => {
table_name => $self->column_change_table_name,
columns => $self->change_column_columns,
call_class_methods => [
set_primary_key => ['id'],
@$col_context_uniq_const,
#add_unique_constraint => ["change_id", ["change_id", "column_name"]],
belongs_to => [
$self->reverse_change_data_rel,
$namespace . '::' . $self->change_source_name,
{ id => "change_id" },
{ is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
],
]
}
}
};
};
sub init_schema_namespace {
my $self = shift;
#scream($self->schema_namespace_config);
return DBIx::Class::AuditAny::Util::SchemaMaker->initialize(
%{ $self->schema_namespace_config }
);
}
sub deploy_schema {
my $self = shift;
my $schema = shift;
my $deploy_statements = $schema->deployment_statements;
my $md5 = $self->get_clean_md5($deploy_statements);
my $Rs = $schema->resultset($self->deploy_info_source_name);
my $table = $Rs->result_source->from;
my $deployRow;
try {
$deployRow = $Rs->find($md5);
}
catch {
# Assume exception is due to not being deployed yet and try to deploy:
$schema->deploy;
# Save the actual AuditAny params, ->track() or ->new():
local $Data::Dumper::Maxdepth = 3;
my $auditany_params = $self->AuditObj->track_init_args ?
Data::Dumper->Dump([$self->AuditObj->track_init_args],['*track']) :
Data::Dumper->Dump([$self->AuditObj->build_init_args],['*new']);
$Rs->create({
md5 => $md5,
comment => 'DO NOT REMOVE THIS ROW',
deployed_ddl => $deploy_statements,
( run in 0.969 second using v1.01-cache-2.11-cpan-63c85eba8c4 )