修复null值问题,添加安全版和非安全版接口
This commit is contained in:
parent
64cce9a691
commit
0431c236bd
87
dataset.go
87
dataset.go
@ -2,6 +2,7 @@ package f5
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
|
"q5"
|
||||||
)
|
)
|
||||||
|
|
||||||
type DataSet struct {
|
type DataSet struct {
|
||||||
@ -15,10 +16,13 @@ func (this *DataSet) Next() bool {
|
|||||||
this.GetColumns()
|
this.GetColumns()
|
||||||
this.values = []interface{}{}
|
this.values = []interface{}{}
|
||||||
for i := 0; i < len(this.columns); i++ {
|
for i := 0; i < len(this.columns); i++ {
|
||||||
str := ""
|
str := sql.NullString{}
|
||||||
this.values = append(this.values, &str)
|
this.values = append(this.values, &str)
|
||||||
}
|
}
|
||||||
this.rows.Scan(this.values...)
|
err := this.rows.Scan(this.values...)
|
||||||
|
if err != nil {
|
||||||
|
panic("DataSet Next error:" + err.Error())
|
||||||
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,27 +36,86 @@ func (this *DataSet) GetColumns() []string {
|
|||||||
return this.columns
|
return this.columns
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *DataSet) GetValues() *[]*string {
|
/*
|
||||||
values := []*string{}
|
安全版:nil值视为""
|
||||||
|
*/
|
||||||
|
func (this *DataSet) GetValues() *[]string {
|
||||||
|
values := []string{}
|
||||||
for _, val := range this.values {
|
for _, val := range this.values {
|
||||||
values = append(values, val.(*string))
|
raw_val := val.(*sql.NullString)
|
||||||
|
if raw_val.Valid {
|
||||||
|
values = append(values, raw_val.String)
|
||||||
|
} else {
|
||||||
|
values = append(values, *q5.NewEmptyStrPtr())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return &values
|
return &values
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *DataSet) GetByName(name string) *string {
|
/*
|
||||||
this.GetColumns()
|
安全版:nil值视为""
|
||||||
for i := 0; i < len(this.columns); i++ {
|
*/
|
||||||
if this.columns[i] == name {
|
func (this *DataSet) GetByName(name string) string {
|
||||||
return this.GetByIndex(int32(i))
|
val := this.GetRawValueByName(name)
|
||||||
|
if val == nil {
|
||||||
|
return ""
|
||||||
|
} else {
|
||||||
|
return *val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
安全版:nil值视为""
|
||||||
|
*/
|
||||||
|
func (this *DataSet) GetByIndex(index int32) string {
|
||||||
|
val := this.GetRawValueByIndex(index)
|
||||||
|
if val == nil {
|
||||||
|
return ""
|
||||||
|
} else {
|
||||||
|
return *val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
!!!原始版: 调用方应处理值为nil的情况
|
||||||
|
*/
|
||||||
|
func (this *DataSet) GetRawValues() *[]string {
|
||||||
|
values := []*string{}
|
||||||
|
for _, val := range this.values {
|
||||||
|
raw_val := val.(*sql.NullString)
|
||||||
|
if raw_val.Valid {
|
||||||
|
values = append(values, &raw_val.String)
|
||||||
|
} else {
|
||||||
|
values = append(values, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *DataSet) GetByIndex(index int32) *string {
|
/*
|
||||||
|
!!!原始版: 调用方应处理值为nil的情况
|
||||||
|
*/
|
||||||
|
func (this *DataSet) GetRawValueByName(name string) *string {
|
||||||
this.GetColumns()
|
this.GetColumns()
|
||||||
return this.values[index].(*string)
|
for i := 0; i < len(this.columns); i++ {
|
||||||
|
if this.columns[i] == name {
|
||||||
|
return this.GetRawValueByIndex(int32(i))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
!!!原始版: 调用方应处理值为nil的情况
|
||||||
|
*/
|
||||||
|
func (this *DataSet) GetRawValueByIndex(index int32) *string {
|
||||||
|
this.GetColumns()
|
||||||
|
sql_val := this.values[index].(*sql.NullString)
|
||||||
|
if sql_val.Valid {
|
||||||
|
return &sql_val.String
|
||||||
|
} else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDataSet(rows *sql.Rows) *DataSet {
|
func NewDataSet(rows *sql.Rows) *DataSet {
|
||||||
|
@ -238,8 +238,8 @@ func (this *dbPool) PageQuery(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if rows != nil && rows.Next() {
|
if rows != nil && rows.Next() {
|
||||||
pagination.Total = q5.ToInt32(*rows.GetByIndex(0))
|
pagination.Total = q5.ToInt32(rows.GetByIndex(0))
|
||||||
pagination.TotalPages = int32(math.Ceil(q5.ToFloat64(*rows.GetByIndex(0)) /
|
pagination.TotalPages = int32(math.Ceil(q5.ToFloat64(rows.GetByIndex(0)) /
|
||||||
float64(pagination.PerPage)))
|
float64(pagination.PerPage)))
|
||||||
}
|
}
|
||||||
start := pagination.PerPage * (pagination.CurrentPage - 1)
|
start := pagination.PerPage * (pagination.CurrentPage - 1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user