forked from rethinkdb/rethinkdb-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
example_query_transformation_test.go
161 lines (136 loc) · 2.9 KB
/
example_query_transformation_test.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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package gorethink
import (
"fmt"
)
// Return the first five squares.
func ExampleTerm_Map() {
cur, err := Expr([]int{1, 2, 3, 4, 5}).Map(func(val Term) Term {
return val.Mul(val)
}).Run(session)
if err != nil {
fmt.Print(err)
return
}
var res []int
err = cur.All(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
// Output:
// [1 4 9 16 25]
}
// Sum the elements of three sequences.
func ExampleMap_multipleSequences() {
var sequence1 = []int{100, 200, 300, 400}
var sequence2 = []int{10, 20, 30, 40}
var sequence3 = []int{1, 2, 3, 4}
cur, err := Map(sequence1, sequence2, sequence3, func(val1, val2, val3 Term) Term {
return val1.Add(val2).Add(val3)
}).Run(session)
if err != nil {
fmt.Print(err)
return
}
var res []int
err = cur.All(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
// Output:
// [111 222 333 444]
}
// Order all the posts using the index date.
func ExampleTerm_OrderBy_index() {
cur, err := DB("examples").Table("posts").OrderBy(OrderByOpts{
Index: "date",
}).Run(session)
if err != nil {
fmt.Print(err)
return
}
var res []interface{}
err = cur.All(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
}
// Order all the posts using the index date in descending order.
func ExampleTerm_OrderBy_indexDesc() {
cur, err := DB("examples").Table("posts").OrderBy(OrderByOpts{
Index: Desc("date"),
}).Run(session)
if err != nil {
fmt.Print(err)
return
}
var res []interface{}
err = cur.All(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
}
// You can efficiently order using multiple fields by using a compound index.
// For example order by date and title.
func ExampleTerm_OrderBy_compound() {
cur, err := DB("examples").Table("posts").OrderBy(OrderByOpts{
Index: Desc("dateAndTitle"),
}).Run(session)
if err != nil {
fmt.Print(err)
return
}
var res []interface{}
err = cur.All(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
}
// If you have a sequence with fewer documents than the arrayLimit, you can order
// it by multiple fields without an index.
func ExampleTerm_OrderBy_multiple() {
cur, err := DB("examples").Table("posts").OrderBy(
"title",
OrderByOpts{Index: Desc("date")},
).Run(session)
if err != nil {
fmt.Print(err)
return
}
var res []interface{}
err = cur.All(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
}
// Notice that an index ordering always has highest precedence. The following
// query orders posts by date, and if multiple posts were published on the same
// date, they will be ordered by title.
func ExampleTerm_OrderBy_multipleWithIndex() {
cur, err := DB("examples").Table("posts").OrderBy(
"title",
OrderByOpts{Index: Desc("date")},
).Run(session)
if err != nil {
fmt.Print(err)
return
}
var res []interface{}
err = cur.All(&res)
if err != nil {
fmt.Print(err)
return
}
fmt.Print(res)
}