b0b64eb4 by slene

some change

1 parent 831eeca7
...@@ -21,7 +21,11 @@ const ( ...@@ -21,7 +21,11 @@ const (
21 21
22 var ( 22 var (
23 dataBaseCache = &_dbCache{cache: make(map[string]*alias)} 23 dataBaseCache = &_dbCache{cache: make(map[string]*alias)}
24 drivers = make(map[string]driverType) 24 drivers = map[string]driverType{
25 "mysql": DR_MySQL,
26 "postgres": DR_Postgres,
27 "sqlite3": DR_Sqlite,
28 }
25 dbBasers = map[driverType]dbBaser{ 29 dbBasers = map[driverType]dbBaser{
26 DR_MySQL: newdbBaseMysql(), 30 DR_MySQL: newdbBaseMysql(),
27 DR_Sqlite: newdbBaseSqlite(), 31 DR_Sqlite: newdbBaseSqlite(),
...@@ -122,9 +126,3 @@ func RegisterDriver(name string, typ driverType) { ...@@ -122,9 +126,3 @@ func RegisterDriver(name string, typ driverType) {
122 } 126 }
123 } 127 }
124 } 128 }
125
126 func init() {
127 RegisterDriver("mysql", DR_MySQL)
128 RegisterDriver("postgres", DR_Postgres)
129 RegisterDriver("sqlite3", DR_Sqlite)
130 }
......
...@@ -58,12 +58,19 @@ type Manager struct { ...@@ -58,12 +58,19 @@ type Manager struct {
58 // } 58 // }
59 // } 59 // }
60 60
61 func (m *Manager) Init(model Modeler) Modeler { 61 func (m *Manager) Init(model Modeler, args ...interface{}) Modeler {
62 if m.inited { 62 if m.inited {
63 return m.ins 63 return m.ins
64 } 64 }
65 m.inited = true 65 m.inited = true
66 m.ins = model 66 m.ins = model
67 skipInitial := false
68 if len(args) > 0 {
69 if b, ok := args[0].(bool); ok && b {
70 skipInitial = true
71 }
72 }
73 _ = skipInitial
67 return model 74 return model
68 } 75 }
69 76
......
...@@ -27,6 +27,7 @@ type orm struct { ...@@ -27,6 +27,7 @@ type orm struct {
27 } 27 }
28 28
29 func (o *orm) Object(md Modeler) ObjectSeter { 29 func (o *orm) Object(md Modeler) ObjectSeter {
30 md.Init(md, true)
30 name := md.GetTableName() 31 name := md.GetTableName()
31 if mi, ok := modelCache.get(name); ok { 32 if mi, ok := modelCache.get(name); ok {
32 return newObject(o, mi, md) 33 return newObject(o, mi, md)
...@@ -38,8 +39,9 @@ func (o *orm) QueryTable(ptrStructOrTableName interface{}) QuerySeter { ...@@ -38,8 +39,9 @@ func (o *orm) QueryTable(ptrStructOrTableName interface{}) QuerySeter {
38 name := "" 39 name := ""
39 if table, ok := ptrStructOrTableName.(string); ok { 40 if table, ok := ptrStructOrTableName.(string); ok {
40 name = snakeString(table) 41 name = snakeString(table)
41 } else if m, ok := ptrStructOrTableName.(Modeler); ok { 42 } else if md, ok := ptrStructOrTableName.(Modeler); ok {
42 name = m.GetTableName() 43 md.Init(md, true)
44 name = md.GetTableName()
43 } 45 }
44 if mi, ok := modelCache.get(name); ok { 46 if mi, ok := modelCache.get(name); ok {
45 return newQuerySet(o, mi) 47 return newQuerySet(o, mi)
......
...@@ -17,6 +17,7 @@ func (o *insertSet) Insert(md Modeler) (int64, error) { ...@@ -17,6 +17,7 @@ func (o *insertSet) Insert(md Modeler) (int64, error) {
17 if o.closed { 17 if o.closed {
18 return 0, ErrStmtClosed 18 return 0, ErrStmtClosed
19 } 19 }
20 md.Init(md, true)
20 val := reflect.ValueOf(md) 21 val := reflect.ValueOf(md)
21 ind := reflect.Indirect(val) 22 ind := reflect.Indirect(val)
22 if val.Type() != o.mi.addrField.Type() { 23 if val.Type() != o.mi.addrField.Type() {
......
...@@ -14,7 +14,7 @@ type Fielder interface { ...@@ -14,7 +14,7 @@ type Fielder interface {
14 } 14 }
15 15
16 type Modeler interface { 16 type Modeler interface {
17 Init(Modeler) Modeler 17 Init(Modeler, ...interface{}) Modeler
18 IsInited() bool 18 IsInited() bool
19 Clean() IFieldErrors 19 Clean() IFieldErrors
20 CleanFields(string) IFieldErrors 20 CleanFields(string) IFieldErrors
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!