The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Name

Class::DBI::DataMigration::Mapping::HasAToHasA - Map a single column in a single row that represents a has_a relatsionship from the source database to a single column in a single row that represents a has_a relationship in the target database.

Synopsis

 # Assume:
 #   - we have SourceDB and TargetDB, with two slightly different
 #      schemata for keeping track of cars
 #   - in the source Car class, there's a has_a relationship called
 #      'body_colour' to a BodyColour object
 #   - in the target class, there's a has_a relationship called 'colour'
 #      to a Colour object
 #   - the 'name' field of a given Car's BodyColour should be used to find
 #      a Colour object in the target db, where the matching column is also 'name';
 #      this Colour object will be used to populate the has_a relationship in the
 #      target db

 my $mapping = Class::DBI::DataMigration::Mapping::HasAToHasA->new({
    target_class            => 'TargetDB::Colour',
    target_class_search_key => 'name',
    matching_source_key     => 'body_colour->name'
 });

 my $mapped_colour = $mapping->map('body_colour', $car);

 # ...$mapped_colour is now the Colour object in the target database that should
 # be used to populate the has_a relationship there. See also the sample yaml file in
 # Class::DBI::DataMigration::Migrator for an example of how this would be configured.

Description

A Class representing the mapping between a single column in a single row that represents a has_a relatsionship from the source database to a single column in a single row that represents a has_a relationship in the target database.

Methods

target_class

Accessor/mutator for the entity in which the target database object representing our has_a releationship will be found.

target_class_search_key

Accessor/mutator for the key into the target entity class which should be used to search for the object representing the has_a relationship.

matching_source_key

Accessor/mutator for the key into the source object we are mapping that should be used to search for a matching value via the target class search key in the target entity class.

target_allows_null

Accessor/mutator for a true or false value indicating whether it is an error to be unable to find a matching object in the target has_a entity class; if set to false, an error will be reported if no matching object is found at map() time.

default_target_search_key_value

Accessor/mutator for a value which, if supplied, will be used as the default value for searching in the target has_a class when no target has_a object can be found.

map

Given a primary key into our source entity, and an object from our source class, attempt to find an object in the target has_a entity that matches the object returned by calling our matching_source_key on the source object.

If this search fails, and target_allows_null is false, we try again, using our default_target_search_key_value, if it is defined. If we still haven't found an object in the target database, we confess with an error.

An error is also confessed if at any point we find more than one matching target has_a object.

See Also

Class::DBI::DataMigration

Author

Dan Friedman <lamech@cpan.org>

Copyright & License

Copyright 2004 Dan Friedman, All Rights Reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

Please note that these modules are not products of or supported by the employers of the various contributors to the code.