-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbasic_test.go
More file actions
87 lines (74 loc) · 1.88 KB
/
Copy pathbasic_test.go
File metadata and controls
87 lines (74 loc) · 1.88 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
package examples
import (
"database/sql"
"fmt"
"github.com/poki/mongodb-filter-to-postgres/filter"
)
func ExampleNewConverter() {
// Remeber to use `filter.WithArrayDriver(pg.Array)` when using github.com/lib/pq
converter, err := filter.NewConverter(filter.WithNestedJSONB("meta", "created_at", "updated_at"))
if err != nil {
// handle error
}
mongoFilterQuery := `{
"name": "John",
"created_at": {
"$gte": "2020-01-01T00:00:00Z"
}
}`
conditions, values, err := converter.Convert([]byte(mongoFilterQuery), 1)
if err != nil {
// handle error
}
fmt.Println(conditions)
fmt.Printf("%#v\n", values)
// Output:
// (("created_at" >= $1) AND ("meta"->>'name' = $2))
// []interface {}{"2020-01-01T00:00:00Z", "John"}
}
func ExampleNewConverter_emptyfilter() {
converter, err := filter.NewConverter(filter.WithAllowAllColumns(), filter.WithEmptyCondition("TRUE")) // The default is FALSE if you don't change it.
if err != nil {
// handle error
}
mongoFilterQuery := `{}`
conditions, _, err := converter.Convert([]byte(mongoFilterQuery), 1)
if err != nil {
// handle error
}
fmt.Println(conditions)
// Output:
// TRUE
}
func ExampleNewConverter_nonIsolatedConditions() {
converter, err := filter.NewConverter(filter.WithAllowAllColumns())
if err != nil {
// handle error
}
mongoFilterQuery := `{
"$or": [
{ "email": "johndoe@example.org" },
{ "name": {"$regex": "^John.*^" },
]
}`
conditions, values, err := converter.Convert([]byte(mongoFilterQuery), 3)
if err != nil {
// handle error
}
query := `
SELECT *
FROM users
WHERE
disabled_at IS NOT NULL
AND role = $1
AND verified_at > $2
AND ` + conditions + `
LIMIT 10
`
role := "user"
verifiedAt := "2020-01-01T00:00:00Z"
values = append([]any{role, verifiedAt}, values...)
db, _ := sql.Open("postgres", "...")
rows := db.QueryRow(query, values...)
_ = rows // actually use rows
}