GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  DBIX::CLASS::DEPLOYMENTHANDLER::COOKBOOK::CUSTOMRESULTSOURCE (3)

.ds Aq ’

NAME

DBIx::Class::DeploymentHandler::Cookbook::CustomResultSource - Customize how your DBICDH versions are stored

CONTENTS

DESCRIPTION

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 setups
 use 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 cant do that
 # see: http://rt.cpan.org/Public/Bug/Display.html?id=46347
 with 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.

AUTHOR

Arthur Axel fREW Schmidt <frioux+cpan@gmail.com>

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.

Search for    or go to Top of page |  Section 3 |  Main Index


perl v5.20.3 DBIX::CLASS::DEPLOYMENTHANDLER::COOKBOOK::CUSTOMRESULTSOURCE (3) 2015-06-14

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.