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 )