Skip to content

Commit 6ef49d7

Browse files
pieternnfx
authored andcommitted
Hoist default value into type specific parameter struct
1 parent c881ef4 commit 6ef49d7

File tree

3 files changed

+36
-30
lines changed

3 files changed

+36
-30
lines changed

sqlanalytics/api/query.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,13 @@ type QueryParameter struct {
9595
Name string `json:"name"`
9696
Title string `json:"title,omitempty"`
9797
Type string `json:"type"`
98-
Value string `json:"value"`
9998
}
10099

101100
// QueryParameterText ...
102101
type QueryParameterText struct {
103102
QueryParameter
103+
104+
Value string `json:"value"`
104105
}
105106

106107
// MarshalJSON sets the type before marshaling.
@@ -113,6 +114,8 @@ func (p QueryParameterText) MarshalJSON() ([]byte, error) {
113114
// QueryParameterNumber ...
114115
type QueryParameterNumber struct {
115116
QueryParameter
117+
118+
Value float64 `json:"value"`
116119
}
117120

118121
// MarshalJSON sets the type before marshaling.
@@ -132,6 +135,8 @@ type QueryParameterMultipleValuesOptions struct {
132135
// QueryParameterEnum ...
133136
type QueryParameterEnum struct {
134137
QueryParameter
138+
139+
Value string `json:"value"`
135140
Options string `json:"enumOptions"`
136141
Multi *QueryParameterMultipleValuesOptions `json:"multiValuesOptions,omitempty"`
137142
}
@@ -146,6 +151,8 @@ func (p QueryParameterEnum) MarshalJSON() ([]byte, error) {
146151
// QueryParameterQuery ...
147152
type QueryParameterQuery struct {
148153
QueryParameter
154+
155+
Value string `json:"value"`
149156
QueryID string `json:"queryId"`
150157
Multi *QueryParameterMultipleValuesOptions `json:"multiValuesOptions,omitempty"`
151158
}

sqlanalytics/resource_query.go

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,9 @@ type QuerySchedule struct {
3232
type QueryParameter struct {
3333
Name string `json:"name"`
3434
Title string `json:"title,omitempty"`
35-
Type string `json:"type,omitempty"`
36-
Value string `json:"value,omitempty"`
37-
38-
// // This is optional and conflicts with the struct types below.
39-
// // It is included for types that don't need additional type specific parameters (e.g. text or number).
40-
// // They can be specified as an empty block, but `type = "text"` is easier on the eyes.
41-
// Type string `json:"type,omitempty"`
4235

36+
// Type specific structs.
37+
// Only one of them may be set.
4338
Text *QueryParameterText `json:"text,omitempty"`
4439
Number *QueryParameterNumber `json:"number,omitempty"`
4540
Enum *QueryParameterEnum `json:"enum,omitempty"`
@@ -48,20 +43,24 @@ type QueryParameter struct {
4843

4944
// QueryParameterText ...
5045
type QueryParameterText struct {
46+
Value string `json:"value"`
5147
}
5248

5349
// QueryParameterNumber ...
5450
type QueryParameterNumber struct {
51+
Value float64 `json:"value"`
5552
}
5653

5754
// QueryParameterEnum ...
5855
type QueryParameterEnum struct {
56+
Value string `json:"value"`
5957
Options []string `json:"options"`
6058
Multiple *QueryParameterAllowMultiple `json:"multiple,omitempty"`
6159
}
6260

6361
// QueryParameterQuery ...
6462
type QueryParameterQuery struct {
63+
Value string `json:"value"`
6564
QueryID string `json:"query_id"`
6665
Multiple *QueryParameterAllowMultiple `json:"multiple,omitempty"`
6766
}
@@ -128,7 +127,6 @@ func (r *queryResource) toAPIObject(d *schema.ResourceData) (*api.Query, error)
128127
ap := api.QueryParameter{
129128
Name: p.Name,
130129
Title: p.Title,
131-
Value: p.Value,
132130
}
133131

134132
var iface interface{}
@@ -137,14 +135,17 @@ func (r *queryResource) toAPIObject(d *schema.ResourceData) (*api.Query, error)
137135
case p.Text != nil:
138136
iface = api.QueryParameterText{
139137
QueryParameter: ap,
138+
Value: p.Text.Value,
140139
}
141140
case p.Number != nil:
142141
iface = api.QueryParameterNumber{
143142
QueryParameter: ap,
143+
Value: p.Number.Value,
144144
}
145145
case p.Enum != nil:
146146
tmp := api.QueryParameterEnum{
147147
QueryParameter: ap,
148+
Value: p.Enum.Value,
148149
Options: strings.Join(p.Enum.Options, "\n"),
149150
}
150151
if p.Enum.Multiple != nil {
@@ -154,25 +155,13 @@ func (r *queryResource) toAPIObject(d *schema.ResourceData) (*api.Query, error)
154155
case p.Query != nil:
155156
tmp := api.QueryParameterQuery{
156157
QueryParameter: ap,
158+
Value: p.Query.Value,
157159
QueryID: p.Query.QueryID,
158160
}
159161
if p.Query.Multiple != nil {
160162
tmp.Multi = p.Query.Multiple.toAPIObject()
161163
}
162164
iface = tmp
163-
case p.Type != "":
164-
switch p.Type {
165-
case "text":
166-
iface = api.QueryParameterText{
167-
QueryParameter: ap,
168-
}
169-
case "number":
170-
iface = api.QueryParameterNumber{
171-
QueryParameter: ap,
172-
}
173-
default:
174-
log.Fatalf("Don't know what to do for type: %#v", p.Type)
175-
}
176165
default:
177166
log.Fatalf("Don't know what to do for QueryParameter...")
178167
}
@@ -211,26 +200,28 @@ func (r *queryResource) fromAPIObject(aq *api.Query, d *schema.ResourceData) err
211200
case *api.QueryParameterText:
212201
p.Name = apv.Name
213202
p.Title = apv.Title
214-
p.Type = "text"
215-
p.Value = apv.Value
203+
p.Text = &QueryParameterText{
204+
Value: apv.Value,
205+
}
216206
case *api.QueryParameterNumber:
217207
p.Name = apv.Name
218208
p.Title = apv.Title
219-
p.Type = "number"
220-
p.Value = apv.Value
209+
p.Number = &QueryParameterNumber{
210+
Value: apv.Value,
211+
}
221212
case *api.QueryParameterEnum:
222213
p.Name = apv.Name
223214
p.Title = apv.Title
224-
p.Value = apv.Value
225215
p.Enum = &QueryParameterEnum{
216+
Value: apv.Value,
226217
Options: strings.Split(apv.Options, "\n"),
227218
Multiple: newQueryParameterAllowMultiple(apv.Multi),
228219
}
229220
case *api.QueryParameterQuery:
230221
p.Name = apv.Name
231222
p.Title = apv.Title
232-
p.Value = apv.Value
233223
p.Query = &QueryParameterQuery{
224+
Value: apv.Value,
234225
QueryID: apv.QueryID,
235226
Multiple: newQueryParameterAllowMultiple(apv.Multi),
236227
}

sqlanalytics/resource_query_test.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,19 +217,24 @@ func TestQueryUpdateWithParams(t *testing.T) {
217217
parameter {
218218
name = "1"
219219
title = "Title for column 1"
220-
type = "text"
220+
text {
221+
value = ""
222+
}
221223
}
222224
223225
parameter {
224226
name = "2"
225227
title = "Title for column 2"
226-
type = "number"
228+
number {
229+
value = 0
230+
}
227231
}
228232
229233
parameter {
230234
name = "3"
231235
title = "Title for column 3"
232236
enum {
237+
value = ""
233238
options = ["e1", "e2"]
234239
multiple {
235240
prefix = "\""
@@ -243,6 +248,7 @@ func TestQueryUpdateWithParams(t *testing.T) {
243248
name = "3"
244249
title = "Title for column 3 without multiple"
245250
enum {
251+
value = ""
246252
options = ["e1", "e2"]
247253
}
248254
}
@@ -251,6 +257,7 @@ func TestQueryUpdateWithParams(t *testing.T) {
251257
name = "4"
252258
title = "Title for column 4"
253259
query {
260+
value = ""
254261
query_id = "abc"
255262
multiple {
256263
prefix = "\""
@@ -264,6 +271,7 @@ func TestQueryUpdateWithParams(t *testing.T) {
264271
name = "4"
265272
title = "Title for column 4 without multiple"
266273
query {
274+
value = ""
267275
query_id = "abc"
268276
multiple {
269277
prefix = "\""

0 commit comments

Comments
 (0)