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
SQL::Translator::Diff(3) User Contributed Perl Documentation SQL::Translator::Diff(3)

SQL::Translator::Diff - determine differences between two schemas

Takes two input SQL::Translator::Schemas (or SQL files) and produces ALTER statements to make them the same

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;

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_args
Hash of extra arguments passed to "new" in SQL::Translator and the below "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, $args)"
  • "alter_drop_constraint($con, $args)"
  • "alter_create_index($idx, $args)"
  • "alter_drop_index($idx, $args)"
  • "add_field($fld, $args)"
  • "alter_field($old_fld, $new_fld, $args)"
  • "rename_field($old_fld, $new_fld, $args)"
  • "drop_field($fld, $args)"
  • "alter_table($table, $args)"
  • "drop_table($table, $args)"
  • "rename_table($old_table, $new_table, $args)" (optional)
  • "batch_alter_table($table, $hash, $args)" (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 an array reference.

    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($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 constraint 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.)

Original Author(s) unknown.

Refactor/re-write and more comprehensive tests by Ash Berlin "ash@cpan.org".

Redevelopment sponsored by Takkle Inc.

2018-06-13 perl v5.32.1

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

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