Files
aorm/builder/cache.go
tangpanqing 35a18b5af9 update
2023-01-12 13:11:09 +08:00

64 lines
1.4 KiB
Go

package builder
import (
"github.com/tangpanqing/aorm/utils"
"reflect"
)
type FieldInfo struct {
TablePointer uintptr
Name string
}
var TableMap = make(map[uintptr]string)
var FieldMap = make(map[uintptr]FieldInfo)
//Store 保存到缓存
func Store(destList ...interface{}) {
for i := 0; i < len(destList); i++ {
dest := destList[i]
valueOf := reflect.ValueOf(dest)
typeof := reflect.TypeOf(dest)
tablePointer := valueOf.Pointer()
tableName := getTableNameByReflect(typeof, valueOf)
setTableMap(tablePointer, tableName)
for j := 0; j < valueOf.Elem().NumField(); j++ {
fieldPointer := valueOf.Elem().Field(j).Addr().Pointer()
key, _ := getFieldNameByReflect(typeof.Elem().Field(j))
setFieldMap(fieldPointer, FieldInfo{
TablePointer: tablePointer,
Name: key,
})
}
}
}
func setTableMap(tablePointer uintptr, name string) {
TableMap[tablePointer] = name
}
func getTableMap(tablePointer uintptr) string {
return TableMap[tablePointer]
}
func setFieldMap(fieldPointer uintptr, fieldInfo FieldInfo) {
FieldMap[fieldPointer] = fieldInfo
}
func getFieldMap(fieldPointer uintptr) FieldInfo {
return FieldMap[fieldPointer]
}
func getFieldNameByReflect(field reflect.StructField) (string, map[string]string) {
key := utils.UnderLine(field.Name)
tag := field.Tag.Get("aorm")
tagMap := getTagMap(tag)
if column, ok := tagMap["column"]; ok {
key = column
}
return key, tagMap
}