file as indices (and probably other things) get messed up
* Workaround for some MySQL quirks on primary key definitions
* MySQL producer does not attempt to write out non-existent unique constraint names
+* MySQL parser correctly differentiates between signed and unsigned integer column
+ display sizes
# ----------------------------------------------------------
# 0.11010 2011-10-05
# Takes a field, and returns
sub normalize_field {
my ($field) = @_;
- my ($size, $type, $list, $changed) = @_;
+ my ($size, $type, $list, $unsigned, $changed);
$size = $field->size;
$type = $field->data_type;
$list = $field->extra->{list} || [];
+ $unsigned = defined($field->extra->{unsigned});
if ( !ref $size && $size eq 0 ) {
if ( lc $type eq 'tinyint' ) {
- $changed = $size != 4;
- $size = 4;
+ $changed = $size != 4 - $unsigned;
+ $size = 4 - $unsigned;
}
elsif ( lc $type eq 'smallint' ) {
- $changed = $size != 6;
- $size = 6;
+ $changed = $size != 6 - $unsigned;
+ $size = 6 - $unsigned;
}
elsif ( lc $type eq 'mediumint' ) {
- $changed = $size != 9;
- $size = 9;
+ $changed = $size != 9 - $unsigned;
+ $size = 9 - $unsigned;
}
elsif ( $type =~ /^int(eger)?$/i ) {
- $changed = $size != 11 || $type ne 'int';
+ $changed = $size != 11 - $unsigned || $type ne 'int';
$type = 'int';
- $size = 11;
+ $size = 11 - $unsigned;
}
elsif ( lc $type eq 'bigint' ) {
$changed = $size != 20;