Skip to content

Commit 2301e09

Browse files
committed
workaround github.com/go-sql-driver/mysql/pull/1424 not released
1 parent 31781fc commit 2301e09

File tree

2 files changed

+28
-11
lines changed

2 files changed

+28
-11
lines changed

dump.go

+18-1
Original file line numberDiff line numberDiff line change
@@ -383,11 +383,28 @@ func (table *table) Init() error {
383383

384384
table.values = make([]interface{}, len(tt))
385385
for i, tp := range tt {
386-
table.values[i] = reflect.New(tp.ScanType()).Interface()
386+
table.values[i] = reflect.New(reflectColumnType(tp)).Interface()
387387
}
388388
return nil
389389
}
390390

391+
func reflectColumnType(tp *sql.ColumnType) reflect.Type {
392+
// workaround https://github.com/go-sql-driver/mysql/pull/1424 till it's released
393+
nullable, _ := tp.Nullable()
394+
switch tp.DatabaseTypeName() {
395+
case "TINYBLOB", "MEDIUMBLOB", "LONGBLOB", "BLOB",
396+
"VARBINARY", "BINARY", "BIT", "GEOMETRY":
397+
return reflect.TypeOf([]byte{})
398+
case "TINYTEXT", "MEDIUMTEXT", "LONGTEXT", "TEXT",
399+
"VARCHAR", "CHAR", "DECIMAL", "ENUM", "SET", "JSON", "TIME":
400+
if nullable {
401+
return reflect.TypeOf(sql.NullString{})
402+
}
403+
return reflect.TypeOf("")
404+
}
405+
return tp.ScanType()
406+
}
407+
391408
func (table *table) Next() bool {
392409
if table.rows == nil {
393410
if err := table.Init(); err != nil {

mysqldump_test.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ CREATE TABLE 'Test_Table' (
6565
~NullFloat64~ DOUBLE,
6666
~bool~ TINYINT(1) NOT NULL,
6767
~NullBool~ TINYINT(1),
68-
~time~ TIME NOT NULL,
69-
~NullTime~ TIME,
68+
~time~ DATETIME NOT NULL,
69+
~NullTime~ DATETIME,
7070
~varbinary~ VARBINARY,
7171
~rawbytes~ BLOB,
7272
PRIMARY KEY (~id~)
@@ -128,8 +128,8 @@ func mockColumnRows() *sqlmock.Rows {
128128
AddRow("NullFloat64", "DOUBLE", "YES", "", nil, "").
129129
AddRow("bool", "BOOL", "NO", "", nil, "").
130130
AddRow("NullBool", "BOOL", "YES", "", nil, "").
131-
AddRow("time", "TIME", "NO", "", nil, "").
132-
AddRow("NullTime", "TIME", "YES", "", nil, "").
131+
AddRow("time", "DATETIME", "NO", "", nil, "").
132+
AddRow("NullTime", "DATETIME", "YES", "", nil, "").
133133
AddRow("varbinary", "VARBINARY", "YES", "", nil, "").
134134
AddRow("rawbytes", "BLOB", "YES", "", nil, "")
135135
}
@@ -185,10 +185,10 @@ func c(name string, v interface{}) *sqlmock.Column {
185185
nullable = true
186186
t = "BOOL"
187187
case time.Time:
188-
t = "TIME"
188+
t = "DATETIME"
189189
case sql.NullTime:
190190
nullable = true
191-
t = "TIME"
191+
t = "DATETIME"
192192
case []byte:
193193
nullable = true
194194
t = "VARBINARY"
@@ -243,8 +243,8 @@ func RunDump(t testing.TB, data *mysqldump.Data) {
243243
~NullFloat64~ DOUBLE,
244244
~bool~ TINYINT(1) NOT NULL,
245245
~NullBool~ TINYINT(1),
246-
~time~ TIME NOT NULL,
247-
~NullTime~ TIME,
246+
~time~ DATETIME NOT NULL,
247+
~NullTime~ DATETIME,
248248
~varbinary~ VARBINARY,
249249
~rawbytes~ BLOB,
250250
PRIMARY KEY (~id~)
@@ -421,8 +421,8 @@ func TestNoLockOk(t *testing.T) {
421421
~NullFloat64~ DOUBLE,
422422
~bool~ TINYINT(1) NOT NULL,
423423
~NullBool~ TINYINT(1),
424-
~time~ TIME NOT NULL,
425-
~NullTime~ TIME,
424+
~time~ DATETIME NOT NULL,
425+
~NullTime~ DATETIME,
426426
~varbinary~ VARBINARY,
427427
~rawbytes~ BLOB,
428428
PRIMARY KEY (~id~)

0 commit comments

Comments
 (0)