DBIx::Class::DeploymentHandler::Cookbook::CustomResultSource3pm
Customize how your dbicdh versions are stored
Overview
One of the reasons for the absurd level of flexibility that DBIx::Class::DeploymentHandler is so that you can do things that we did not originally anticipate. Surprisingly, I never added a method to change the table for the version storage. That's fine though, the following recipe shows how one can do it in style:
Version Storage
package MyApp::Schema::DBICDHStorage;# the following is necessary for some setupsuse MyApp::Schema::DBICDHStorageResult;use Moose;extends 'DBIx::Class::DeploymentHandler::VersionStorage::Standard';sub _build_version_rs {$_[0]->schema->register_class(__VERSION =>'MyApp::Schema::DBICDHStorageResult');$_[0]->schema->resultset('__VERSION')}no Moose;__PACKAGE__->meta->make_immutable;1;
There's not a whole lot special there. The only real bit of code to point out is the "register_class" call. We make sure to point "__VERSION" to the result class that we will define next.
Version Result Class
package MyApp::Schema::DBICDHStorageResult;use parent 'DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult';__PACKAGE__->table('fl_bench_journal_versions');1;
As you can see, this is almost silly how simple it is, we just change the table being set on the original result.
Our very own DeploymentHandler
package MyApp::Schema::DeploymentHandler;use Moose;extends 'DBIx::Class::DeploymentHandler::Dad';# a single with would be better, but we can't do that# see: http://rt.cpan.org/Public/Bug/Display.html?id=46347with 'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => {interface_role => 'DBIx::Class::DeploymentHandler::HandlesDeploy',class_name => 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator',delegate_name => 'deploy_method',attributes_to_assume => ['schema'],attributes_to_copy => [qw( databases script_directory sql_translator_args )],},'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => {interface_role => 'DBIx::Class::DeploymentHandler::HandlesVersioning',class_name => 'DBIx::Class::DeploymentHandler::VersionHandler::Monotonic',delegate_name => 'version_handler',attributes_to_assume => [qw( database_version schema_version to_version )],},'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => {interface_role => 'DBIx::Class::DeploymentHandler::HandlesVersionStorage',class_name => 'MyApp::Schema::DBICDHStorage',delegate_name => 'version_storage',attributes_to_assume => ['schema'],};with 'DBIx::Class::DeploymentHandler::WithReasonableDefaults';sub prepare_version_storage_install {my $self = shift;$self->prepare_resultsource_install({result_source => $self->version_storage->version_rs->result_source});}sub install_version_storage {my $self = shift;my $version = (shift || {})->{version} || $self->schema_version;$self->install_resultsource({result_source => $self->version_storage->version_rs->result_source,version => $version,});}sub prepare_install {$_[0]->prepare_deploy;$_[0]->prepare_version_storage_install;}no Moose;__PACKAGE__->meta->make_immutable;1;
Note: if you are using decimal numbers for versioning, you should ammend this DeploymentHandler package, setting it's VersionHandler class_name from Monotonic ( which handles integer only version numbers ) to ExplicitVersions or DatabaseToSchemaVersions, as these handle version numbers as strings instead of integers.
Copyright and license
This software is copyright (c) 2015 by Arthur Axel "fREW" Schmidt.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
Releases
2 releases since Debian 8 (Jessie); the text changed 1 time.