Permalink
Browse files

Merge pull request #355 from github/unsigned-int

localtests and fix for unsigned medium int problem
  • Loading branch information...
2 parents 31ba582 + 56ab127 commit 5af70265a3de74ad0f9719ae2c547669a5946ccf @shlomi-noach shlomi-noach committed on GitHub Jan 25, 2017
Showing with 49 additions and 5 deletions.
  1. +1 −1 RELEASE_VERSION
  2. +6 −1 go/logic/inspect.go
  3. +2 −2 go/sql/builder.go
  4. +12 −1 go/sql/types.go
  5. +28 −0 localtests/unsigned-modify/create.sql
View
@@ -1 +1 @@
-1.0.34
+1.0.35
View
@@ -529,6 +529,11 @@ func (this *Inspector) applyColumnTypes(databaseName, tableName string, columnsL
columnsList.SetUnsigned(columnName)
}
}
+ if strings.Contains(columnType, "mediumint") {
+ for _, columnsList := range columnsLists {
+ columnsList.GetColumn(columnName).Type = sql.MediumIntColumnType
+ }
+ }
if strings.Contains(columnType, "timestamp") {
for _, columnsList := range columnsLists {
columnsList.GetColumn(columnName).Type = sql.TimestampColumnType
@@ -541,7 +546,7 @@ func (this *Inspector) applyColumnTypes(databaseName, tableName string, columnsL
}
if strings.HasPrefix(columnType, "enum") {
for _, columnsList := range columnsLists {
- columnsList.GetColumn(columnName).Type = sql.EnumColumnValue
+ columnsList.GetColumn(columnName).Type = sql.EnumColumnType
}
}
if charset := m.GetString("CHARACTER_SET_NAME"); charset != "" {
View
@@ -258,7 +258,7 @@ func BuildUniqueKeyRangeEndPreparedQuery(databaseName, tableName string, uniqueK
uniqueKeyColumnDescending := make([]string, len(uniqueKeyColumnNames), len(uniqueKeyColumnNames))
for i, column := range uniqueKeyColumns.Columns() {
uniqueKeyColumnNames[i] = EscapeName(uniqueKeyColumnNames[i])
- if column.Type == EnumColumnValue {
+ if column.Type == EnumColumnType {
uniqueKeyColumnAscending[i] = fmt.Sprintf("concat(%s) asc", uniqueKeyColumnNames[i])
uniqueKeyColumnDescending[i] = fmt.Sprintf("concat(%s) desc", uniqueKeyColumnNames[i])
} else {
@@ -309,7 +309,7 @@ func buildUniqueKeyMinMaxValuesPreparedQuery(databaseName, tableName string, uni
uniqueKeyColumnOrder := make([]string, len(uniqueKeyColumnNames), len(uniqueKeyColumnNames))
for i, column := range uniqueKeyColumns.Columns() {
uniqueKeyColumnNames[i] = EscapeName(uniqueKeyColumnNames[i])
- if column.Type == EnumColumnValue {
+ if column.Type == EnumColumnType {
uniqueKeyColumnOrder[i] = fmt.Sprintf("concat(%s) %s", uniqueKeyColumnNames[i], order)
} else {
uniqueKeyColumnOrder[i] = fmt.Sprintf("%s %s", uniqueKeyColumnNames[i], order)
View
@@ -18,9 +18,12 @@ const (
UnknownColumnType ColumnType = iota
TimestampColumnType = iota
DateTimeColumnType = iota
- EnumColumnValue = iota
+ EnumColumnType = iota
+ MediumIntColumnType = iota
)
+const maxMediumintUnsigned int32 = 16777215
+
type TimezoneConvertion struct {
ToTimezone string
}
@@ -50,6 +53,14 @@ func (this *Column) convertArg(arg interface{}) interface{} {
return uint16(i)
}
if i, ok := arg.(int32); ok {
+ if this.Type == MediumIntColumnType {
+ // problem with mediumint is that it's a 3-byte type. There is no compatible golang type to match that.
+ // So to convert from negative to positive we'd need to convert the value manually
+ if i >= 0 {
+ return i
+ }
+ return uint32(maxMediumintUnsigned + i + 1)
+ }
return uint32(i)
}
if i, ok := arg.(int64); ok {
@@ -0,0 +1,28 @@
+drop table if exists gh_ost_test;
+create table gh_ost_test (
+ id bigint(20) NOT NULL AUTO_INCREMENT,
+ column1 int(11) NOT NULL,
+ column2 smallint(5) unsigned NOT NULL,
+ column3 mediumint(8) unsigned NOT NULL,
+ column4 tinyint(3) unsigned NOT NULL,
+ column5 int(11) NOT NULL,
+ column6 int(11) NOT NULL,
+ PRIMARY KEY (id),
+ KEY c12_ix (column1, column2)
+) auto_increment=1;
+
+drop event if exists gh_ost_test;
+delimiter ;;
+create event gh_ost_test
+ on schedule every 1 second
+ starts current_timestamp
+ ends current_timestamp + interval 60 second
+ on completion not preserve
+ enable
+ do
+begin
+ -- mediumint maxvalue: 16777215 (unsigned), 8388607 (signed)
+ insert into gh_ost_test values (NULL, 13382498, 536, 8388607, 3, 1483892217, 1483892218);
+ insert into gh_ost_test values (NULL, 13382498, 536, 8388607, 250, 1483892217, 1483892218);
+ insert into gh_ost_test values (NULL, 13382498, 536, 10000000, 3, 1483892217, 1483892218);
+end ;;

0 comments on commit 5af7026

Please sign in to comment.