.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "DBIx::Class::DeploymentHandler::Cookbook::CustomResultSource 3pm" .TH DBIx::Class::DeploymentHandler::Cookbook::CustomResultSource 3pm "2015-10-31" "perl v5.20.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" DBIx::Class::DeploymentHandler::Cookbook::CustomResultSource \- Customize how your DBICDH versions are stored .SH "DESCRIPTION" .IX Header "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: .SS "Version Storage" .IX Subsection "Version Storage" .Vb 1 \& package MyApp::Schema::DBICDHStorage; \& \& # the following is necessary for some setups \& use MyApp::Schema::DBICDHStorageResult; \& \& use Moose; \& extends \*(AqDBIx::Class::DeploymentHandler::VersionStorage::Standard\*(Aq; \& \& sub _build_version_rs { \& $_[0]\->schema\->register_class( \& _\|_VERSION => \& \*(AqMyApp::Schema::DBICDHStorageResult\*(Aq \& ); \& $_[0]\->schema\->resultset(\*(Aq_\|_VERSION\*(Aq) \& } \& \& no Moose; \& _\|_PACKAGE_\|_\->meta\->make_immutable; \& 1; .Ve .PP There's not a whole lot special there. The only real bit of code to point out is the \f(CW\*(C`register_class\*(C'\fR call. We make sure to point \f(CW\*(C`_\|_VERSION\*(C'\fR to the result class that we will define next. .SS "Version Result Class" .IX Subsection "Version Result Class" .Vb 4 \& package MyApp::Schema::DBICDHStorageResult; \& use parent \*(AqDBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult\*(Aq; \& _\|_PACKAGE_\|_\->table(\*(Aqfl_bench_journal_versions\*(Aq); \& 1; .Ve .PP As you can see, this is almost silly how simple it is, we just change the table being set on the original result. .SS "Our very own DeploymentHandler" .IX Subsection "Our very own DeploymentHandler" .Vb 3 \& package MyApp::Schema::DeploymentHandler; \& use Moose; \& extends \*(AqDBIx::Class::DeploymentHandler::Dad\*(Aq; \& \& # a single with would be better, but we can\*(Aqt do that \& # see: http://rt.cpan.org/Public/Bug/Display.html?id=46347 \& with \*(AqDBIx::Class::DeploymentHandler::WithApplicatorDumple\*(Aq => { \& interface_role => \*(AqDBIx::Class::DeploymentHandler::HandlesDeploy\*(Aq, \& class_name => \*(AqDBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator\*(Aq, \& delegate_name => \*(Aqdeploy_method\*(Aq, \& attributes_to_assume => [\*(Aqschema\*(Aq], \& attributes_to_copy => [qw( databases script_directory sql_translator_args )], \& }, \& \*(AqDBIx::Class::DeploymentHandler::WithApplicatorDumple\*(Aq => { \& interface_role => \*(AqDBIx::Class::DeploymentHandler::HandlesVersioning\*(Aq, \& class_name => \*(AqDBIx::Class::DeploymentHandler::VersionHandler::Monotonic\*(Aq, \& delegate_name => \*(Aqversion_handler\*(Aq, \& attributes_to_assume => [qw( database_version schema_version to_version )], \& }, \& \*(AqDBIx::Class::DeploymentHandler::WithApplicatorDumple\*(Aq => { \& interface_role => \*(AqDBIx::Class::DeploymentHandler::HandlesVersionStorage\*(Aq, \& class_name => \*(AqMyApp::Schema::DBICDHStorage\*(Aq, \& delegate_name => \*(Aqversion_storage\*(Aq, \& attributes_to_assume => [\*(Aqschema\*(Aq], \& }; \& with \*(AqDBIx::Class::DeploymentHandler::WithReasonableDefaults\*(Aq; \& \& 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; .Ve .PP 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. .SH "AUTHOR" .IX Header "AUTHOR" Arthur Axel \*(L"fREW\*(R" Schmidt .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" This software is copyright (c) 2015 by Arthur Axel \*(L"fREW\*(R" Schmidt. .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.