-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathtable.go
More file actions
executable file
·95 lines (76 loc) · 1.98 KB
/
table.go
File metadata and controls
executable file
·95 lines (76 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package torm
import (
"github.com/thinkoner/torm/utils"
"reflect"
)
type TableName interface {
TableName() string
}
// Model Begin a fluent query against a database Model.
func (c *Connection) Model(model interface{}) *Builder {
var table string
kind := reflect.Indirect(reflect.ValueOf(model)).Kind()
if kind != reflect.Struct {
panic("unsupported model, should be slice or struct")
}
if t, ok := model.(TableName); ok {
table = t.TableName()
} else {
modelType := reflect.ValueOf(model).Type()
if t, ok := reflect.New(modelType).Interface().(TableName); ok {
table = t.TableName()
} else {
table = utils.SnakeCase(modelType.Name())
}
}
return c.Table(table)
}
// Create Save a new model to the database.
func (c *Connection) Create(model interface{}) error {
schema, err := NewSchema(model)
if err != nil {
return err
}
attributes := schema.Attributes()
insertId, _, err := c.Model(model).Insert(attributes)
if err != nil {
return err
}
schema.SetId(insertId)
return nil
}
// Save Save the model to the database.
func (c *Connection) Save(model interface{}) error {
var err error
var schema *Schema
schema, err = NewSchema(model)
if err != nil {
return err
}
attributes := schema.Attributes()
if schema.PrimaryField != nil && !schema.PrimaryField.IsBlank {
_, err = c.Model(model).Where(schema.PrimaryField.Name, schema.PrimaryField.Value.Addr().Interface()).Update(attributes)
} else {
var insertId int64
insertId, _, err = c.Model(model).Insert(attributes)
if err == nil {
schema.SetId(insertId)
}
}
return err
}
// Destroy Destroy the model.
func (c *Connection) Destroy(model interface{}) error {
var err error
var schema *Schema
schema, err = NewSchema(model)
if err != nil {
return err
}
if schema.PrimaryField != nil && !schema.PrimaryField.IsBlank {
_, err = c.Model(model).Where(schema.PrimaryField.Name, schema.PrimaryField.Value.Addr().Interface()).Delete()
} else {
_, err = c.Model(model).Delete()
}
return err
}