Oracle 11g
This commit is contained in:
parent
2d3723822b
commit
05805630f2
@ -9,6 +9,7 @@ GORM Oracle driver for connect Oracle DB and Manage Oracle DB, Based on [CengSin
|
|||||||
## Required dependency Install
|
## Required dependency Install
|
||||||
|
|
||||||
- Oracle 12C+
|
- Oracle 12C+
|
||||||
|
- Oracle 11g
|
||||||
- Golang 1.13+
|
- Golang 1.13+
|
||||||
- see [ODPI-C Installation.](https://oracle.github.io/odpi/doc/installation.html)
|
- see [ODPI-C Installation.](https://oracle.github.io/odpi/doc/installation.html)
|
||||||
- gorm 1.24.0+
|
- gorm 1.24.0+
|
||||||
|
68
utils.go
68
utils.go
@ -1,68 +0,0 @@
|
|||||||
package oracle
|
|
||||||
|
|
||||||
import (
|
|
||||||
"database/sql"
|
|
||||||
"reflect"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"gorm.io/gorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
func convertCustomType(val interface{}) interface{} {
|
|
||||||
rv := reflect.ValueOf(val)
|
|
||||||
ri := rv.Interface()
|
|
||||||
typeName := reflect.TypeOf(ri).Name()
|
|
||||||
if reflect.TypeOf(val).Kind() == reflect.Ptr {
|
|
||||||
if rv.IsNil() {
|
|
||||||
typeName = rv.Type().Elem().Name()
|
|
||||||
} else {
|
|
||||||
for rv.Kind() == reflect.Ptr {
|
|
||||||
rv = rv.Elem()
|
|
||||||
}
|
|
||||||
ri = rv.Interface()
|
|
||||||
typeName = reflect.TypeOf(ri).Name()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if typeName == "DeletedAt" {
|
|
||||||
// gorm.DeletedAt
|
|
||||||
if rv.IsZero() {
|
|
||||||
val = sql.NullTime{}
|
|
||||||
} else {
|
|
||||||
val = getTimeValue(ri.(gorm.DeletedAt).Time)
|
|
||||||
}
|
|
||||||
} else if m := rv.MethodByName("Time"); m.IsValid() && m.Type().NumIn() == 0 {
|
|
||||||
// custom time type
|
|
||||||
for _, result := range m.Call([]reflect.Value{}) {
|
|
||||||
if reflect.TypeOf(result.Interface()).Name() == "Time" {
|
|
||||||
val = getTimeValue(result.Interface().(time.Time))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return val
|
|
||||||
}
|
|
||||||
|
|
||||||
func ptrDereference(obj interface{}) (value interface{}) {
|
|
||||||
if obj == nil {
|
|
||||||
return obj
|
|
||||||
}
|
|
||||||
if t := reflect.TypeOf(obj); t.Kind() != reflect.Ptr {
|
|
||||||
return obj
|
|
||||||
}
|
|
||||||
|
|
||||||
v := reflect.ValueOf(obj)
|
|
||||||
for v.Kind() == reflect.Ptr && !v.IsNil() {
|
|
||||||
v = v.Elem()
|
|
||||||
}
|
|
||||||
if !v.IsValid() || v.Kind() == reflect.Ptr && v.IsNil() {
|
|
||||||
return obj
|
|
||||||
}
|
|
||||||
value = v.Interface()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func getTimeValue(t time.Time) interface{} {
|
|
||||||
if t.IsZero() {
|
|
||||||
return sql.NullTime{}
|
|
||||||
}
|
|
||||||
return t
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user