X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F30sqlt-new-diff-sqlite.t;h=34f6fb1c4dfb07a3af84390f0641d8ac9776b848;hb=4384692aca82fb49ad4a49c08d7ddbde85bc4ecb;hp=946b02b8805afdf72cc07e58f824fae5763257e3;hpb=86d345c34e64608f4cc10553d1fdd7b4d3e19199;p=dbsrgits%2FSQL-Translator.git diff --git a/t/30sqlt-new-diff-sqlite.t b/t/30sqlt-new-diff-sqlite.t index 946b02b..34f6fb1 100644 --- a/t/30sqlt-new-diff-sqlite.t +++ b/t/30sqlt-new-diff-sqlite.t @@ -23,7 +23,7 @@ my ( $source_schema, $target_schema ) = map { or die $tr->error; my $out = $t->translate( catfile($Bin, qw/data diff/, $_ ) ) or die $tr->error; - + my $schema = $t->schema; unless ( $schema->name ) { $schema->name( $_ ); @@ -32,14 +32,15 @@ my ( $source_schema, $target_schema ) = map { } (qw/create1.yml create2.yml/); # Test for differences -my $out = SQL::Translator::Diff::schema_diff( $source_schema, 'SQLite', $target_schema, 'SQLite', - { no_batch_alters => 1, +my $out = SQL::Translator::Diff::schema_diff( $source_schema, 'SQLite', $target_schema, 'SQLite', + { no_batch_alters => 1, ignore_missing_methods => 1, output_db => 'SQLite', - } + } ); + eq_or_diff($out, <<'## END OF DIFF', "Diff as expected"); --- Convert schema 'create1.yml' to 'create2.yml': +-- Convert schema 'create1.yml' to 'create2.yml':; BEGIN; @@ -47,22 +48,35 @@ CREATE TABLE added ( id int(11) ); - ALTER TABLE old_name RENAME TO new_name; + DROP INDEX FK5302D47D93FE702E; + DROP INDEX UC_age_name; + DROP INDEX u_name; --- SQL::Translator::Producer::SQLite cant drop_field + +-- SQL::Translator::Producer::SQLite cant drop_field; + ALTER TABLE new_name ADD COLUMN new_field int; -ALTER TABLE person ADD COLUMN is_rock_star tinyint(4) DEFAULT '1'; --- SQL::Translator::Producer::SQLite cant alter_field --- SQL::Translator::Producer::SQLite cant rename_field -CREATE UNIQUE INDEX unique_name_person ON person (name); -CREATE UNIQUE INDEX UC_person_id_person ON person (person_id); -CREATE UNIQUE INDEX UC_age_name_person ON person (age, name); + +ALTER TABLE person ADD COLUMN is_rock_star tinyint(4) DEFAULT 1; + +-- SQL::Translator::Producer::SQLite cant alter_field; + +-- SQL::Translator::Producer::SQLite cant rename_field; + +CREATE UNIQUE INDEX unique_name ON person (name); + +CREATE UNIQUE INDEX UC_person_id ON person (person_id); + +CREATE UNIQUE INDEX UC_age_name ON person (age, name); + DROP TABLE deleted; + COMMIT; + ## END OF DIFF @@ -73,7 +87,7 @@ $out = SQL::Translator::Diff::schema_diff($source_schema, 'SQLite', $target_sche }); eq_or_diff($out, <<'## END OF DIFF', "Diff as expected"); --- Convert schema 'create1.yml' to 'create2.yml': +-- Convert schema 'create1.yml' to 'create2.yml':; BEGIN; @@ -81,64 +95,87 @@ CREATE TABLE added ( id int(11) ); - - CREATE TEMPORARY TABLE employee_temp_alter ( position varchar(50) NOT NULL, employee_id int(11) NOT NULL, - PRIMARY KEY (position, employee_id) + PRIMARY KEY (position, employee_id), + FOREIGN KEY (employee_id) REFERENCES person(person_id) ); -INSERT INTO employee_temp_alter SELECT position, employee_id FROM employee; + +INSERT INTO employee_temp_alter( position, employee_id) SELECT position, employee_id FROM employee; + DROP TABLE employee; + CREATE TABLE employee ( position varchar(50) NOT NULL, employee_id int(11) NOT NULL, - PRIMARY KEY (position, employee_id) + PRIMARY KEY (position, employee_id), + FOREIGN KEY (employee_id) REFERENCES person(person_id) ); + INSERT INTO employee SELECT position, employee_id FROM employee_temp_alter; + DROP TABLE employee_temp_alter; ALTER TABLE old_name RENAME TO new_name; + ALTER TABLE new_name ADD COLUMN new_field int; + CREATE TEMPORARY TABLE person_temp_alter ( person_id INTEGER PRIMARY KEY NOT NULL, name varchar(20) NOT NULL, - age int(11) DEFAULT '18', + age int(11) DEFAULT 18, weight double(11,2), - iq int(11) DEFAULT '0', - is_rock_star tinyint(4) DEFAULT '1', + iq int(11) DEFAULT 0, + is_rock_star tinyint(4) DEFAULT 1, + value double(8,2) DEFAULT 0.00, physical_description text ); -INSERT INTO person_temp_alter SELECT person_id, name, age, weight, iq, is_rock_star, physical_description FROM person; + +INSERT INTO person_temp_alter( person_id, name, age, weight, iq, value, physical_description) SELECT person_id, name, age, weight, iq, value, description FROM person; + DROP TABLE person; + CREATE TABLE person ( person_id INTEGER PRIMARY KEY NOT NULL, name varchar(20) NOT NULL, - age int(11) DEFAULT '18', + age int(11) DEFAULT 18, weight double(11,2), - iq int(11) DEFAULT '0', - is_rock_star tinyint(4) DEFAULT '1', + iq int(11) DEFAULT 0, + is_rock_star tinyint(4) DEFAULT 1, + value double(8,2) DEFAULT 0.00, physical_description text ); -CREATE UNIQUE INDEX unique_name_person02 ON person (name); -CREATE UNIQUE INDEX UC_person_id_person02 ON person (person_id); -CREATE UNIQUE INDEX UC_age_name_person02 ON person (age, name); -INSERT INTO person SELECT person_id, name, age, weight, iq, is_rock_star, physical_description FROM person_temp_alter; + +CREATE UNIQUE INDEX unique_name02 ON person (name); + +CREATE UNIQUE INDEX UC_person_id02 ON person (person_id); + +CREATE UNIQUE INDEX UC_age_name02 ON person (age, name); + +INSERT INTO person SELECT person_id, name, age, weight, iq, is_rock_star, value, physical_description FROM person_temp_alter; + DROP TABLE person_temp_alter; DROP TABLE deleted; + COMMIT; + ## END OF DIFF +# Note the 02 in the 3 names above (end of diff) are an implementation +# quirk - there is nothing to reset the global seen-names register +# The rewrite should abolish this altogether, and carry the register in +# the main schema object # Test for sameness $out = SQL::Translator::Diff::schema_diff($source_schema, 'MySQL', $source_schema, 'MySQL' ); eq_or_diff($out, <<'## END OF DIFF', "No differences found"); --- Convert schema 'create1.yml' to 'create1.yml': +-- Convert schema 'create1.yml' to 'create1.yml':; --- No differences found +-- No differences found; ## END OF DIFF