Fix test
This commit is contained in:
parent
87f3dec0c0
commit
d2a5cd7660
|
@ -0,0 +1,48 @@
|
||||||
|
// Copyright 2021 The Xorm Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package convert
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Interface2Interface(userLocation *time.Location, v interface{}) (interface{}, error) {
|
||||||
|
if v == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
switch vv := v.(type) {
|
||||||
|
case *int64:
|
||||||
|
return *vv, nil
|
||||||
|
case *int8:
|
||||||
|
return *vv, nil
|
||||||
|
case *sql.NullString:
|
||||||
|
return vv.String, nil
|
||||||
|
case *sql.RawBytes:
|
||||||
|
if len([]byte(*vv)) > 0 {
|
||||||
|
return []byte(*vv), nil
|
||||||
|
}
|
||||||
|
return nil, nil
|
||||||
|
case *sql.NullInt32:
|
||||||
|
return vv.Int32, nil
|
||||||
|
case *sql.NullInt64:
|
||||||
|
return vv.Int64, nil
|
||||||
|
case *sql.NullFloat64:
|
||||||
|
return vv.Float64, nil
|
||||||
|
case *sql.NullBool:
|
||||||
|
if vv.Valid {
|
||||||
|
return vv.Bool, nil
|
||||||
|
}
|
||||||
|
return nil, nil
|
||||||
|
case *sql.NullTime:
|
||||||
|
if vv.Valid {
|
||||||
|
return vv.Time.In(userLocation).Format("2006-01-02 15:04:05"), nil
|
||||||
|
}
|
||||||
|
return "", nil
|
||||||
|
default:
|
||||||
|
return "", fmt.Errorf("convert assign string unsupported type: %#v", vv)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1384,18 +1384,21 @@ func (p *pqDriver) GenScanResult(colType string) (interface{}, error) {
|
||||||
case "BIGINT":
|
case "BIGINT":
|
||||||
var s sql.NullInt64
|
var s sql.NullInt64
|
||||||
return &s, nil
|
return &s, nil
|
||||||
case "TINYINT", "INT":
|
case "TINYINT", "INT", "INT8", "INT4":
|
||||||
var s sql.NullInt32
|
var s sql.NullInt32
|
||||||
return &s, nil
|
return &s, nil
|
||||||
case "FLOAT":
|
case "FLOAT", "FLOAT4":
|
||||||
var s sql.NullFloat64
|
var s sql.NullFloat64
|
||||||
return &s, nil
|
return &s, nil
|
||||||
case "DATETIME":
|
case "DATETIME", "TIMESTAMP":
|
||||||
var s sql.NullTime
|
var s sql.NullTime
|
||||||
return &s, nil
|
return &s, nil
|
||||||
case "BIT":
|
case "BIT":
|
||||||
var s sql.RawBytes
|
var s sql.RawBytes
|
||||||
return &s, nil
|
return &s, nil
|
||||||
|
case "BOOL":
|
||||||
|
var s sql.NullBool
|
||||||
|
return &s, nil
|
||||||
default:
|
default:
|
||||||
fmt.Printf("unknow postgres database type: %v\n", colType)
|
fmt.Printf("unknow postgres database type: %v\n", colType)
|
||||||
var r sql.RawBytes
|
var r sql.RawBytes
|
||||||
|
|
29
scan.go
29
scan.go
|
@ -6,8 +6,8 @@ package xorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
|
||||||
|
|
||||||
|
"xorm.io/xorm/convert"
|
||||||
"xorm.io/xorm/core"
|
"xorm.io/xorm/core"
|
||||||
"xorm.io/xorm/dialects"
|
"xorm.io/xorm/dialects"
|
||||||
)
|
)
|
||||||
|
@ -86,30 +86,11 @@ func (engine *Engine) row2mapInterface(rows *core.Rows, types []*sql.ColumnType,
|
||||||
}
|
}
|
||||||
|
|
||||||
for ii, key := range fields {
|
for ii, key := range fields {
|
||||||
switch t := scanResultContainers[ii].(type) {
|
res, err := convert.Interface2Interface(engine.TZLocation, scanResultContainers[ii])
|
||||||
case *sql.NullInt32:
|
if err != nil {
|
||||||
resultsMap[key] = t.Int32
|
return nil, err
|
||||||
case *sql.NullInt64:
|
|
||||||
resultsMap[key] = t.Int64
|
|
||||||
case *sql.NullFloat64:
|
|
||||||
resultsMap[key] = t.Float64
|
|
||||||
case *sql.NullString:
|
|
||||||
resultsMap[key] = t.String
|
|
||||||
case *sql.NullTime:
|
|
||||||
if t.Valid {
|
|
||||||
resultsMap[key] = t.Time.In(engine.TZLocation).Format("2006-01-02 15:04:05")
|
|
||||||
} else {
|
|
||||||
resultsMap[key] = nil
|
|
||||||
}
|
|
||||||
case *sql.RawBytes:
|
|
||||||
if t == nil {
|
|
||||||
resultsMap[key] = nil
|
|
||||||
} else {
|
|
||||||
resultsMap[key] = []byte(*t)
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return nil, fmt.Errorf("unknow type: %v", t)
|
|
||||||
}
|
}
|
||||||
|
resultsMap[key] = res
|
||||||
}
|
}
|
||||||
return resultsMap, nil
|
return resultsMap, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue