123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- package orm
- import (
- "fmt"
- "math/rand"
- "reflect"
- "strings"
- "sync"
- "time"
- )
- type tbl struct {
- rt reflect.Type
- rv reflect.Value
- lock *sync.RWMutex
- name string
- tFn MapperFn
- fFn MapperFn
- f fields
- rel relations
- mapped bool
- }
- func (t *tbl) GetName() string {
- t.ReadLock()
- defer t.Unlock()
- return t.getName()
- }
- func (t *tbl) getName() string {
- return t.getType().Name()
- }
- func (t *tbl) GetTableName() string {
- t.ReadLock()
- defer t.Unlock()
- return t.getTable()
- }
- func (t *tbl) getTable() string {
- if len(t.name) == 0 {
- t.name = t.tFn(t.getType().Name())
- }
- return t.name
- }
- func (t *tbl) String() string {
- return fmt.Sprintf("%s (`%s`):%s",
- t.getName(), t.getTable(),
- func() string {
- s := strings.Split(t.f.String(), ",")
- if len(s) <= 1 {
- return " " + t.f.String()
- }
- return "\n\t" + strings.Join(s, ",\n\t")
- }(),
- )
- }
- func (t *tbl) add(r reflect.StructField) {
- switch r.Type.Kind() {
- case reflect.Ptr:
- fmt.Println("Ptr", r)
- case reflect.Map:
- fmt.Println("Map", r)
- case reflect.Struct:
- fmt.Println("Struct", r)
- default:
- t.f = append(t.f, field{r.Name, t.fFn(r.Name), r.Type.Kind()})
- }
- }
- func (t *tbl) getType() reflect.Type {
- return t.rt
- }
- func (t *tbl) getValue() reflect.Value {
- return t.rv
- }
- func (t *tbl) isMapped() bool {
- return t.mapped
- }
- func (t *tbl) ReadLock() *tbl {
- t.lock.RLock()
- return t
- }
- func (t *tbl) WriteLock() *tbl {
- if t.mapped {
- return nil
- }
- t.lock.Lock()
- return t
- }
- func (t *tbl) Unlock() {
- if !t.mapped {
- t.mapped = true
- t.lock.Unlock()
- return
- }
- t.lock.RUnlock()
- }
- func (t *tbl) randomWork(wg *sync.WaitGroup) *tbl {
- time.Sleep((time.Duration)(rand.Intn(100)*rand.Intn(100)) * time.Millisecond)
- return t
- }
|