From 09835b5673f3699282b64daaac3a44d7c180e65c Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 10 Jul 2021 23:40:33 +0800 Subject: [PATCH] improve code --- convert.go | 1 - engine.go | 29 ++++++++++++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/convert.go b/convert.go index 20a6e373..69277734 100644 --- a/convert.go +++ b/convert.go @@ -348,7 +348,6 @@ func convertAssign(dest, src interface{}, originalLocation *time.Location, conve *d = cloneBytes(s) return nil } - case time.Time: switch d := dest.(type) { case *string: diff --git a/engine.go b/engine.go index 9bcd0ea5..5ac9f13a 100644 --- a/engine.go +++ b/engine.go @@ -576,7 +576,6 @@ func (engine *Engine) dumpTables(tables []*schemas.Table, w io.Writer, tp ...sch cols := table.ColumnsSeq() dstCols := dstTable.ColumnsSeq() - dstColumns := dstTable.Columns() colNames := engine.dialect.Quoter().Join(cols, ", ") destColNames := dstDialect.Quoter().Join(dstCols, ", ") @@ -600,14 +599,34 @@ func (engine *Engine) dumpTables(tables []*schemas.Table, w io.Writer, tp ...sch return err } - scanResults, err := sess.engine.scanInterfaces(rows, types) + scanResults, err := sess.engine.scanStringInterface(rows, types) if err != nil { return err } for i, scanResult := range scanResults { - s := formatColumnValue(engine.DatabaseTZ, dstDialect, scanResult, dstColumns[i]) - if _, err = io.WriteString(w, s); err != nil { - return err + stp := schemas.SQLType{Name: types[i].DatabaseTypeName()} + if stp.IsNumeric() { + s := scanResult.(*sql.NullString) + if s.Valid { + if _, err = io.WriteString(w, s.String); err != nil { + return err + } + } else { + if _, err = io.WriteString(w, "NULL"); err != nil { + return err + } + } + } else { + s := scanResult.(*sql.NullString) + if s.Valid { + if _, err = io.WriteString(w, "'"+strings.ReplaceAll(s.String, "'", "''")+"'"); err != nil { + return err + } + } else { + if _, err = io.WriteString(w, "NULL"); err != nil { + return err + } + } } if i < len(scanResults)-1 { if _, err = io.WriteString(w, ","); err != nil {