mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 22:10:55 +00:00
orm: support insert a specified value to auto field
This commit is contained in:
parent
9f18813c2b
commit
1786b16e61
31
orm/db.go
31
orm/db.go
@ -72,11 +72,11 @@ var _ dbBaser = new(dbBase)
|
|||||||
|
|
||||||
// get struct columns values as interface slice.
|
// get struct columns values as interface slice.
|
||||||
func (d *dbBase) collectValues(mi *modelInfo, ind reflect.Value, cols []string, skipAuto bool, insert bool, names *[]string, tz *time.Location) (values []interface{}, err error) {
|
func (d *dbBase) collectValues(mi *modelInfo, ind reflect.Value, cols []string, skipAuto bool, insert bool, names *[]string, tz *time.Location) (values []interface{}, err error) {
|
||||||
var columns []string
|
if names == nil {
|
||||||
|
ns := make([]string, 0, len(cols))
|
||||||
if names != nil {
|
names = &ns
|
||||||
columns = *names
|
|
||||||
}
|
}
|
||||||
|
values = make([]interface{}, 0, len(cols))
|
||||||
|
|
||||||
for _, column := range cols {
|
for _, column := range cols {
|
||||||
var fi *fieldInfo
|
var fi *fieldInfo
|
||||||
@ -93,15 +93,20 @@ func (d *dbBase) collectValues(mi *modelInfo, ind reflect.Value, cols []string,
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if names != nil {
|
// ignore empty value auto field
|
||||||
columns = append(columns, column)
|
if fi.auto {
|
||||||
|
if fi.fieldType&IsPositiveIntegerField > 0 {
|
||||||
|
if vu, ok := value.(uint64); !ok || vu == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if vu, ok := value.(int64); !ok || vu == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
values = append(values, value)
|
*names, values = append(*names, column), append(values, value)
|
||||||
}
|
|
||||||
|
|
||||||
if names != nil {
|
|
||||||
*names = columns
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
@ -349,8 +354,8 @@ func (d *dbBase) Read(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Lo
|
|||||||
|
|
||||||
// execute insert sql dbQuerier with given struct reflect.Value.
|
// execute insert sql dbQuerier with given struct reflect.Value.
|
||||||
func (d *dbBase) Insert(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location) (int64, error) {
|
func (d *dbBase) Insert(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location) (int64, error) {
|
||||||
names := make([]string, 0, len(mi.fields.dbcols)-1)
|
names := make([]string, 0, len(mi.fields.dbcols))
|
||||||
values, err := d.collectValues(mi, ind, mi.fields.dbcols, true, true, &names, tz)
|
values, err := d.collectValues(mi, ind, mi.fields.dbcols, false, true, &names, tz)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user