SQL::Translator::Diff(User Contributed Perl DocumentatSQL::Translator::Diff(3)NAMESQL::Translator::Diff - determine differences between two schemas
DESCRIPTION
Takes two input SQL::Translator::Schemas (or SQL files) and produces
ALTER statments to make them the same
SNYOPSIS
Simplest usage:
use SQL::Translator::Diff;
my $sql = SQL::Translator::Diff::schema_diff($source_schema, 'MySQL', $target_schema, 'MySQL', $options_hash)
OO usage:
use SQL::Translator::Diff;
my $diff = SQL::Translator::Diff->new({
output_db => 'MySQL',
source_schema => $source_schema,
target_schema => $target_schema,
%$options_hash,
})->compute_differences->produce_diff_sql;
OPTIONS
ignore_index_names
Match indexes based on types and fields, ignoring name.
ignore_constraint_names
Match constrains based on types, fields and tables, ignoring name.
output_db
Which producer to use to produce the output.
case_insensitive
Ignore case of table, field, index and constraint names when
comparing
no_batch_alters
Produce each alter as a distinct "ALTER TABLE" statement even if
the producer supports the ability to do all alters for a table as
one statement.
ignore_missing_methods
If the diff would need a method that is missing from the producer,
just emit a comment showing the method is missing, rather than
dieing with an error
PRODUCER FUNCTIONS
The following producer functions should be implemented for
completeness. If any of them are needed for a given diff, but not
found, an error will be thrown.
· "alter_create_constraint($con)"
· "alter_drop_constraint($con)"
· "alter_create_index($idx)"
· "alter_drop_index($idx)"
· "add_field($fld)"
· "alter_field($old_fld, $new_fld)"
· "rename_field($old_fld, $new_fld)"
· "drop_field($fld)"
· "alter_table($table)"
· "drop_table($table)"
· "rename_table($old_table, $new_table)" (optional)
· "batch_alter_table($table, $hash)" (optional)
If the producer supports "batch_alter_table", it will be called
with the table to alter and a hash, the keys of which will be the
method names listed above; values will be arrays of fields or
constraints to operate on. In the case of the field functions that
take two arguments this will appear as a hash.
I.e. the hash might look something like the following:
{
alter_create_constraint => [ $constraint1, $constraint2 ],
add_field => [ $field ],
alter_field => [ [$old_field, $new_field] ]
}
· "preprocess_schema($class, $schema)" (optional)
"preprocess_schema" is called by the Diff code to allow the
producer to normalize any data it needs to first. For example, the
MySQL producer uses this method to ensure that FK contraint names
are unique.
Basicaly any changes that need to be made to produce the SQL file
for the schema should be done here, so that a diff between a parsed
SQL file and (say) a parsed DBIx::Class::Schema object will be
sane.
(As an aside, DBIx::Class, for instance, uses the presence of a
"preprocess_schema" function on the producer to know that it can
diff between the previous SQL file and its own internal
representation. Without this method on th producer it will diff the
two SQL files which is slower, but known to work better on old-
style producers.)
AUTHOR
Original Author(s) unknown.
Refactor/re-write and more comprehensive tests by Ash Berlin
"ash@cpan.org".
Redevelopment sponsored by Takkle Inc.
perl v5.14.2 2011-05-04 SQL::Translator::Diff(3)