refactor driver
This commit is contained in:
parent
fcb1a47037
commit
611e378b7b
|
@ -714,6 +714,9 @@ func (p *mysqlDriver) Scan(ctx *ScanContext, rows *core.Rows, types []*sql.Colum
|
||||||
case *sql.NullTime:
|
case *sql.NullTime:
|
||||||
v2 = append(v2, &sql.NullString{})
|
v2 = append(v2, &sql.NullString{})
|
||||||
turnBackIdxes = append(turnBackIdxes, i)
|
turnBackIdxes = append(turnBackIdxes, i)
|
||||||
|
case bool:
|
||||||
|
v2 = append(v2, new(bool))
|
||||||
|
turnBackIdxes = append(turnBackIdxes, i)
|
||||||
default:
|
default:
|
||||||
v2 = append(v2, scanResults[i])
|
v2 = append(v2, scanResults[i])
|
||||||
}
|
}
|
||||||
|
@ -744,6 +747,9 @@ func (p *mysqlDriver) Scan(ctx *ScanContext, rows *core.Rows, types []*sql.Colum
|
||||||
}
|
}
|
||||||
t.Time = *dt
|
t.Time = *dt
|
||||||
t.Valid = true
|
t.Valid = true
|
||||||
|
case *bool:
|
||||||
|
var s = *(v2[i].(*bool))
|
||||||
|
*t = s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -68,7 +68,7 @@ func TestQueryString2(t *testing.T) {
|
||||||
assert.Equal(t, 1, len(records))
|
assert.Equal(t, 1, len(records))
|
||||||
assert.Equal(t, 2, len(records[0]))
|
assert.Equal(t, 2, len(records[0]))
|
||||||
assert.Equal(t, "1", records[0]["id"])
|
assert.Equal(t, "1", records[0]["id"])
|
||||||
assert.True(t, "0" == records[0]["msg"] || "false" == records[0]["msg"])
|
assert.True(t, "0" == records[0]["msg"] || "false" == records[0]["msg"], records[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
func toString(i interface{}) string {
|
func toString(i interface{}) string {
|
||||||
|
|
|
@ -5,6 +5,19 @@
|
||||||
package xorm
|
package xorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
"database/sql"
|
||||||
|
"errors"
|
||||||
|
>>>>>>> 6e19325 (refactor driver)
|
||||||
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
>>>>>>> 634f82a (refactor driver)
|
||||||
"xorm.io/xorm/core"
|
"xorm.io/xorm/core"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -22,6 +35,69 @@ func (session *Session) Query(sqlOrArgs ...interface{}) ([]map[string][]byte, er
|
||||||
return session.queryBytes(sqlStr, args...)
|
return session.queryBytes(sqlStr, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
func value2String(rawValue *reflect.Value) (str string, err error) {
|
||||||
|
aa := reflect.TypeOf((*rawValue).Interface())
|
||||||
|
vv := reflect.ValueOf((*rawValue).Interface())
|
||||||
|
switch aa.Kind() {
|
||||||
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||||
|
str = strconv.FormatInt(vv.Int(), 10)
|
||||||
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
|
||||||
|
str = strconv.FormatUint(vv.Uint(), 10)
|
||||||
|
case reflect.Float32, reflect.Float64:
|
||||||
|
str = strconv.FormatFloat(vv.Float(), 'f', -1, 64)
|
||||||
|
case reflect.String:
|
||||||
|
str = vv.String()
|
||||||
|
case reflect.Array, reflect.Slice:
|
||||||
|
switch aa.Elem().Kind() {
|
||||||
|
case reflect.Uint8:
|
||||||
|
data := rawValue.Interface().([]byte)
|
||||||
|
str = string(data)
|
||||||
|
if str == "\x00" {
|
||||||
|
str = "0"
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
err = fmt.Errorf("Unsupported struct type %v", vv.Type().Name())
|
||||||
|
}
|
||||||
|
// time type
|
||||||
|
case reflect.Struct:
|
||||||
|
if aa.ConvertibleTo(schemas.TimeType) {
|
||||||
|
str = vv.Convert(schemas.TimeType).Interface().(time.Time).Format(time.RFC3339Nano)
|
||||||
|
} else {
|
||||||
|
err = fmt.Errorf("Unsupported struct type %v", vv.Type().Name())
|
||||||
|
}
|
||||||
|
case reflect.Bool:
|
||||||
|
str = strconv.FormatBool(vv.Bool())
|
||||||
|
case reflect.Complex128, reflect.Complex64:
|
||||||
|
str = fmt.Sprintf("%v", vv.Complex())
|
||||||
|
/* TODO: unsupported types below
|
||||||
|
case reflect.Map:
|
||||||
|
case reflect.Ptr:
|
||||||
|
case reflect.Uintptr:
|
||||||
|
case reflect.UnsafePointer:
|
||||||
|
case reflect.Chan, reflect.Func, reflect.Interface:
|
||||||
|
*/
|
||||||
|
default:
|
||||||
|
err = fmt.Errorf("Unsupported struct type %v", vv.Type().Name())
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// genRowsScanResults according
|
||||||
|
func (session *Session) genRowsScanResults(rows *core.Rows, types []*sql.ColumnType) ([]interface{}, error) {
|
||||||
|
var scanResults = make([]interface{}, len(types))
|
||||||
|
var err error
|
||||||
|
for i, t := range types {
|
||||||
|
scanResults[i], err = session.engine.driver.GenScanResult(t.DatabaseTypeName())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return scanResults, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
>>>>>>> 634f82a (refactor driver)
|
||||||
func (session *Session) rows2Strings(rows *core.Rows) (resultsSlice []map[string]string, err error) {
|
func (session *Session) rows2Strings(rows *core.Rows) (resultsSlice []map[string]string, err error) {
|
||||||
fields, err := rows.Columns()
|
fields, err := rows.Columns()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -31,6 +107,10 @@ func (session *Session) rows2Strings(rows *core.Rows) (resultsSlice []map[string
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
types, err := rows.ColumnTypes()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
result, err := row2mapStr(rows, types, fields)
|
result, err := row2mapStr(rows, types, fields)
|
||||||
|
|
Loading…
Reference in New Issue