-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathexample_test.go
129 lines (124 loc) · 2.03 KB
/
example_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
package structql_test
import (
"fmt"
"github.com/viant/structql"
"log"
"reflect"
"time"
)
type (
Vendor struct {
ID int
Name string
Revenue float64
Products []*Product
}
Product struct {
ID int
Name string
Status int
Performance []*Performance
}
Performance struct {
ProductID int
Date time.Time
Quantity float64
Revenue float64
}
)
func ExampleQuery_Select() {
var vendors = []*Vendor{
{
ID: 1,
Name: "Vendor 1",
Products: []*Product{
{
ID: 1,
Status: 1,
Name: "Product 1",
Performance: []*Performance{
{
ProductID: 1,
Revenue: 13050,
Quantity: 124,
},
},
},
},
},
{
ID: 2,
Name: "Vendor 2",
Products: []*Product{
{
ID: 2,
Name: "Product 2",
Status: 1,
Performance: []*Performance{
{
ProductID: 2,
Revenue: 16050,
Quantity: 110,
},
},
},
{
ID: 7,
Name: "Product 7",
Status: 0,
Performance: []*Performance{
{
ProductID: 7,
Revenue: 160,
Quantity: 10,
},
},
},
},
},
{
ID: 3,
Name: "Vendor 3",
Products: []*Product{
{
ID: 3,
Name: "Product 3",
Status: 1,
Performance: []*Performance{
{
ProductID: 3,
Revenue: 11750,
Quantity: 143,
},
},
},
{
ID: 4,
Name: "Product 4",
Status: 1,
Performance: []*Performance{
{
ProductID: 4,
Revenue: 11,
Quantity: 1,
},
},
},
},
},
}
SQL := "SELECT ProductID,Revenue FROM `/Products[Active=1]/Performance` WHERE Revenue > 100.0 "
type Query1Output struct {
ProductID int
Revenue float64
}
query, err := structql.NewQuery(SQL, reflect.TypeOf(vendors), reflect.TypeOf(Query1Output{}))
if err != nil {
log.Fatal(err)
}
result, err := query.Select(vendors)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%v\n", result)
}