For nullable columns, store nil values as NULL #531
11
helpers.go
11
helpers.go
|
@ -155,6 +155,17 @@ func isZero(k interface{}) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isZeroValue(v reflect.Value) bool {
|
||||||
|
if isZero(v.Interface()) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
switch v.Kind() {
|
||||||
|
case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
|
||||||
|
return v.IsNil()
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func isStructZero(v reflect.Value) bool {
|
func isStructZero(v reflect.Value) bool {
|
||||||
if !v.IsValid() {
|
if !v.IsValid() {
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -674,7 +674,7 @@ func (session *Session) genInsertColumns(bean interface{}) ([]string, []interfac
|
||||||
|
|
||||||
// !evalphobia! set fieldValue as nil when column is nullable and zero-value
|
// !evalphobia! set fieldValue as nil when column is nullable and zero-value
|
||||||
if _, ok := getFlagForColumn(session.statement.nullableMap, col); ok {
|
if _, ok := getFlagForColumn(session.statement.nullableMap, col); ok {
|
||||||
if col.Nullable && isZero(fieldValue.Interface()) {
|
if col.Nullable && isZeroValue(fieldValue) {
|
||||||
var nilValue *int
|
var nilValue *int
|
||||||
fieldValue = reflect.ValueOf(nilValue)
|
fieldValue = reflect.ValueOf(nilValue)
|
||||||
}
|
}
|
||||||
|
|
|
@ -516,7 +516,7 @@ func (session *Session) genUpdateColumns(bean interface{}) ([]string, []interfac
|
||||||
|
|
||||||
// !evalphobia! set fieldValue as nil when column is nullable and zero-value
|
// !evalphobia! set fieldValue as nil when column is nullable and zero-value
|
||||||
if _, ok := getFlagForColumn(session.statement.nullableMap, col); ok {
|
if _, ok := getFlagForColumn(session.statement.nullableMap, col); ok {
|
||||||
if col.Nullable && isZero(fieldValue.Interface()) {
|
if col.Nullable && isZeroValue(fieldValue) {
|
||||||
var nilValue *int
|
var nilValue *int
|
||||||
fieldValue = reflect.ValueOf(nilValue)
|
fieldValue = reflect.ValueOf(nilValue)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user