From d19e2c618db9da4cbcf1e3b89ce2421a9bee1a31 Mon Sep 17 00:00:00 2001 From: Johannes Piehler Date: Mon, 6 Aug 2018 17:26:01 +0200 Subject: [PATCH] Remove normalisation size on floating point types --- lib/SQL/Translator/Parser/MySQL.pm | 7 ++++++- t/30sqlt-new-diff-mysql.t | 14 ++++++-------- t/30sqlt-new-diff-sqlite.t | 4 ++-- t/data/diff/create1.yml | 3 +-- t/data/diff/create2.yml | 3 +-- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/lib/SQL/Translator/Parser/MySQL.pm b/lib/SQL/Translator/Parser/MySQL.pm index c915af540..682248213 100644 --- a/lib/SQL/Translator/Parser/MySQL.pm +++ b/lib/SQL/Translator/Parser/MySQL.pm @@ -1104,7 +1104,7 @@ sub normalize_field { $changed = $size != 20; $size = 20; } - elsif ( lc $type =~ /(float|double|decimal|numeric|real|fixed|dec)/ ) { + elsif ( lc $type =~ /(decimal|numeric|fixed|dec)/ ) { my $old_size = (ref $size || '') eq 'ARRAY' ? $size : []; $changed = @$old_size != 2 || $old_size->[0] != 8 @@ -1113,6 +1113,11 @@ sub normalize_field { } } + if( $type =~ /^(float|double|real)$/i ) { + $changed = $size; + $size = undef; + } + if ( $type =~ /^tiny(text|blob)$/i ) { $changed = $size != 255; $size = 255; diff --git a/t/30sqlt-new-diff-mysql.t b/t/30sqlt-new-diff-mysql.t index 706c2752a..53447f525 100644 --- a/t/30sqlt-new-diff-mysql.t +++ b/t/30sqlt-new-diff-mysql.t @@ -17,14 +17,12 @@ plan tests => 9; use_ok('SQL::Translator::Diff') or die "Cannot continue\n"; -my $tr = SQL::Translator->new; - -my ( $source_schema, $target_schema, $parsed_sql_schema ) = map { +my ( $source_schema, $target_schema ) = map { my $t = SQL::Translator->new; $t->parser( 'YAML' ) - or die $tr->error; + or die $t->error; my $out = $t->translate( catfile($Bin, qw/data diff/, $_ ) ) - or die $tr->error; + or die $t->error; my $schema = $t->schema; unless ( $schema->name ) { @@ -161,9 +159,9 @@ eq_or_diff($out, <<'## END OF DIFF', "No differences found"); { my $t = SQL::Translator->new; $t->parser( 'MySQL' ) - or die $tr->error; + or die $t->error; my $out = $t->translate( catfile($Bin, qw/data mysql create.sql/ ) ) - or die $tr->error; + or die $t->error; # Lets remove the renamed table so we dont have to change the SQL or other tests $target_schema->drop_table('new_name'); @@ -199,7 +197,7 @@ ALTER TABLE employee DROP FOREIGN KEY FK5302D47D93FE702E, ALTER TABLE person DROP INDEX UC_age_name, DROP INDEX u_name, ADD COLUMN is_rock_star tinyint(4) NULL DEFAULT 1, - ADD COLUMN value double(8, 2) NULL DEFAULT 0.00, + ADD COLUMN value double NULL DEFAULT 0.00, CHANGE COLUMN person_id person_id integer(11) NOT NULL auto_increment, CHANGE COLUMN name name varchar(20) NOT NULL, CHANGE COLUMN age age integer(11) NULL DEFAULT 18, diff --git a/t/30sqlt-new-diff-sqlite.t b/t/30sqlt-new-diff-sqlite.t index 34f6fb1c4..622ae79e5 100644 --- a/t/30sqlt-new-diff-sqlite.t +++ b/t/30sqlt-new-diff-sqlite.t @@ -128,7 +128,7 @@ CREATE TEMPORARY TABLE person_temp_alter ( weight double(11,2), iq int(11) DEFAULT 0, is_rock_star tinyint(4) DEFAULT 1, - value double(8,2) DEFAULT 0.00, + value double DEFAULT 0.00, physical_description text ); @@ -143,7 +143,7 @@ CREATE TABLE person ( weight double(11,2), iq int(11) DEFAULT 0, is_rock_star tinyint(4) DEFAULT 1, - value double(8,2) DEFAULT 0.00, + value double DEFAULT 0.00, physical_description text ); diff --git a/t/data/diff/create1.yml b/t/data/diff/create1.yml index b0f147763..c7e412dc8 100644 --- a/t/data/diff/create1.yml +++ b/t/data/diff/create1.yml @@ -215,8 +215,7 @@ schema: name: value order: 7 size: - - 8 - - 2 + - 0 indices: - fields: - name diff --git a/t/data/diff/create2.yml b/t/data/diff/create2.yml index d5912d14d..d809c6e8f 100644 --- a/t/data/diff/create2.yml +++ b/t/data/diff/create2.yml @@ -226,8 +226,7 @@ schema: name: value order: 7 size: - - 8 - - 2 + - 0 indices: - fields: - name