/
rethinker.go
128 lines (98 loc) · 2.71 KB
/
rethinker.go
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package rethinker
import (
r "gopkg.in/dancannon/gorethink.v1"
"log"
)
type (
RethinkConfig struct {
r.ConnectOpts
Debug bool
}
DBRun func(r.Term) r.Term
)
var (
client *r.Session
)
func Startup(opts r.ConnectOpts) error {
var err error
client, err = r.Connect(opts)
if err != nil {
return err
}
return nil
}
func Session() *r.Session {
if client == nil {
log.Fatal("Rethink session has not been setup yet!")
}
return client
}
func Shutdown() error {
return client.Close()
}
func Run(db, table string, run DBRun, optArgs ...r.RunOpts) (*r.Cursor, error) {
tbl := r.DB(db).Table(table)
term := run(tbl)
return term.Run(Session(), optArgs...)
}
func RunWrite(db, table string, run DBRun, optArgs ...r.RunOpts) (r.WriteResponse, error) {
tbl := r.DB(db).Table(table)
term := run(tbl)
return term.RunWrite(Session(), optArgs...)
}
func Table(db, table string) r.Term {
return r.DB(db).Table(table)
}
func TableSetup(db, table string, optArgs ...r.TableCreateOpts) (r.WriteResponse, error) {
wr, err := r.DBCreate(db).RunWrite(Session())
if err != nil {
return wr, err
}
return r.DB(db).TableCreate(table, optArgs...).RunWrite(Session())
}
func TableCreate(db, table string, optArgs ...r.TableCreateOpts) (r.WriteResponse, error) {
return r.DB(db).TableCreate(table, optArgs...).RunWrite(Session())
}
func TableDrop(db, table string) (r.WriteResponse, error) {
return r.DB(db).TableDrop(table).RunWrite(Session())
}
func DBDrop(db string) (r.WriteResponse, error) {
return r.DBDrop(db).RunWrite(Session())
}
func EmptyTable(db, table string) (r.WriteResponse, error) {
return RunWrite(db, table, func(table r.Term) r.Term {
return table.Filter(r.Row.Field("id").Ne("")).Delete()
})
}
func IndexCreate(db, table string, name interface{}, optArgs ...r.IndexCreateOpts) (r.WriteResponse, error) {
return r.DB(db).Table(table).IndexCreate(name, optArgs...).RunWrite(Session())
}
//http://godoc.org/github.com/dancannon/gorethink#Term.Filter
func FindByFilter(db, table string, filter interface{}, rs interface{}, optArgs ...r.RunOpts) error {
c, err := Run(db, table, func(table r.Term) r.Term {
return table.Filter(filter)
}, optArgs...)
if err != nil {
return err
}
return c.All(rs)
}
func FindAll(db, table string, rs interface{}, optArgs ...r.RunOpts) error {
c, err := Run(db, table, func(table r.Term) r.Term {
return table
}, optArgs...)
if err != nil {
return err
}
return c.All(rs)
}
//http://godoc.org/github.com/dancannon/gorethink#Term.Get
func FindById(db, table string, id interface{}, rs interface{}, optArgs ...r.RunOpts) error {
c, err := Run(db, table, func(table r.Term) r.Term {
return table.Get(id)
}, optArgs...)
if err != nil {
return err
}
return c.One(rs)
}