Skip to content

Commit c9714d5

Browse files
pieternnfx
authored andcommitted
Add range variants of datetime parameters
1 parent b5517a7 commit c9714d5

File tree

3 files changed

+153
-15
lines changed

3 files changed

+153
-15
lines changed

sqlanalytics/api/query.go

Lines changed: 58 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ func (o *QueryOptions) UnmarshalJSON(b []byte) error {
8080
i = &QueryParameterDateTime{}
8181
case queryParameterDateTimeSecTypeName:
8282
i = &QueryParameterDateTimeSec{}
83+
case queryParameterDateRangeTypeName:
84+
i = &QueryParameterDateRange{}
85+
case queryParameterDateTimeRangeTypeName:
86+
i = &QueryParameterDateTimeRange{}
87+
case queryParameterDateTimeSecRangeTypeName:
88+
i = &QueryParameterDateTimeSecRange{}
8389
default:
8490
panic("don't know what to do...")
8591
}
@@ -105,13 +111,16 @@ type QueryParameter struct {
105111

106112
// Valid type values.
107113
const (
108-
queryParameterTextTypeName = "text"
109-
queryParameterNumberTypeName = "number"
110-
queryParameterEnumTypeName = "enum"
111-
queryParameterQueryTypeName = "query"
112-
queryParameterDateTypeName = "date"
113-
queryParameterDateTimeTypeName = "datetime-local"
114-
queryParameterDateTimeSecTypeName = "datetime-with-seconds"
114+
queryParameterTextTypeName = "text"
115+
queryParameterNumberTypeName = "number"
116+
queryParameterEnumTypeName = "enum"
117+
queryParameterQueryTypeName = "query"
118+
queryParameterDateTypeName = "date"
119+
queryParameterDateTimeTypeName = "datetime-local"
120+
queryParameterDateTimeSecTypeName = "datetime-with-seconds"
121+
queryParameterDateRangeTypeName = "date-range"
122+
queryParameterDateTimeRangeTypeName = "datetime-range"
123+
queryParameterDateTimeSecRangeTypeName = "datetime-range-with-seconds"
115124
)
116125

117126
// QueryParameterText ...
@@ -222,3 +231,45 @@ func (p QueryParameterDateTimeSec) MarshalJSON() ([]byte, error) {
222231
type localQueryParameter QueryParameterDateTimeSec
223232
return json.Marshal((localQueryParameter)(p))
224233
}
234+
235+
// QueryParameterDateRange ...
236+
type QueryParameterDateRange struct {
237+
QueryParameter
238+
239+
Value string `json:"value"`
240+
}
241+
242+
// MarshalJSON sets the type before marshaling.
243+
func (p QueryParameterDateRange) MarshalJSON() ([]byte, error) {
244+
p.QueryParameter.Type = queryParameterDateRangeTypeName
245+
type localQueryParameter QueryParameterDateRange
246+
return json.Marshal((localQueryParameter)(p))
247+
}
248+
249+
// QueryParameterDateTimeRange ...
250+
type QueryParameterDateTimeRange struct {
251+
QueryParameter
252+
253+
Value string `json:"value"`
254+
}
255+
256+
// MarshalJSON sets the type before marshaling.
257+
func (p QueryParameterDateTimeRange) MarshalJSON() ([]byte, error) {
258+
p.QueryParameter.Type = queryParameterDateTimeRangeTypeName
259+
type localQueryParameter QueryParameterDateTimeRange
260+
return json.Marshal((localQueryParameter)(p))
261+
}
262+
263+
// QueryParameterDateTimeSecRange ...
264+
type QueryParameterDateTimeSecRange struct {
265+
QueryParameter
266+
267+
Value string `json:"value"`
268+
}
269+
270+
// MarshalJSON sets the type before marshaling.
271+
func (p QueryParameterDateTimeSecRange) MarshalJSON() ([]byte, error) {
272+
p.QueryParameter.Type = queryParameterDateTimeSecRangeTypeName
273+
type localQueryParameter QueryParameterDateTimeSecRange
274+
return json.Marshal((localQueryParameter)(p))
275+
}

sqlanalytics/resource_query.go

Lines changed: 58 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,16 @@ type QueryParameter struct {
3535

3636
// Type specific structs.
3737
// Only one of them may be set.
38-
Text *QueryParameterText `json:"text,omitempty"`
39-
Number *QueryParameterNumber `json:"number,omitempty"`
40-
Enum *QueryParameterEnum `json:"enum,omitempty"`
41-
Query *QueryParameterQuery `json:"query,omitempty"`
42-
Date *QueryParameterDate `json:"date,omitempty"`
43-
DateTime *QueryParameterDateTime `json:"datetime,omitempty"`
44-
DateTimeSec *QueryParameterDateTimeSec `json:"datetimesec,omitempty"`
38+
Text *QueryParameterText `json:"text,omitempty"`
39+
Number *QueryParameterNumber `json:"number,omitempty"`
40+
Enum *QueryParameterEnum `json:"enum,omitempty"`
41+
Query *QueryParameterQuery `json:"query,omitempty"`
42+
Date *QueryParameterDate `json:"date,omitempty"`
43+
DateTime *QueryParameterDateTime `json:"datetime,omitempty"`
44+
DateTimeSec *QueryParameterDateTimeSec `json:"datetimesec,omitempty"`
45+
DateRange *QueryParameterDateRange `json:"date_range,omitempty"`
46+
DateTimeRange *QueryParameterDateTimeRange `json:"datetime_range,omitempty"`
47+
DateTimeSecRange *QueryParameterDateTimeSecRange `json:"datetimesec_range,omitempty"`
4548
}
4649

4750
// QueryParameterText ...
@@ -83,6 +86,21 @@ type QueryParameterDateTimeSec struct {
8386
Value string `json:"value"`
8487
}
8588

89+
// QueryParameterDateRange ...
90+
type QueryParameterDateRange struct {
91+
Value string `json:"value"`
92+
}
93+
94+
// QueryParameterDateTimeRange ...
95+
type QueryParameterDateTimeRange struct {
96+
Value string `json:"value"`
97+
}
98+
99+
// QueryParameterDateTimeSecRange ...
100+
type QueryParameterDateTimeSecRange struct {
101+
Value string `json:"value"`
102+
}
103+
86104
// QueryParameterAllowMultiple ...
87105
type QueryParameterAllowMultiple struct {
88106
Prefix string `json:"prefix"`
@@ -195,6 +213,21 @@ func (r *queryResource) toAPIObject(d *schema.ResourceData) (*api.Query, error)
195213
QueryParameter: ap,
196214
Value: p.DateTimeSec.Value,
197215
}
216+
case p.DateRange != nil:
217+
iface = api.QueryParameterDateRange{
218+
QueryParameter: ap,
219+
Value: p.DateRange.Value,
220+
}
221+
case p.DateTimeRange != nil:
222+
iface = api.QueryParameterDateTimeRange{
223+
QueryParameter: ap,
224+
Value: p.DateTimeRange.Value,
225+
}
226+
case p.DateTimeSecRange != nil:
227+
iface = api.QueryParameterDateTimeSecRange{
228+
QueryParameter: ap,
229+
Value: p.DateTimeSecRange.Value,
230+
}
198231
default:
199232
log.Fatalf("Don't know what to do for QueryParameter...")
200233
}
@@ -276,6 +309,24 @@ func (r *queryResource) fromAPIObject(aq *api.Query, d *schema.ResourceData) err
276309
p.DateTimeSec = &QueryParameterDateTimeSec{
277310
Value: apv.Value,
278311
}
312+
case *api.QueryParameterDateRange:
313+
p.Name = apv.Name
314+
p.Title = apv.Title
315+
p.DateRange = &QueryParameterDateRange{
316+
Value: apv.Value,
317+
}
318+
case *api.QueryParameterDateTimeRange:
319+
p.Name = apv.Name
320+
p.Title = apv.Title
321+
p.DateTimeRange = &QueryParameterDateTimeRange{
322+
Value: apv.Value,
323+
}
324+
case *api.QueryParameterDateTimeSecRange:
325+
p.Name = apv.Name
326+
p.Title = apv.Title
327+
p.DateTimeSecRange = &QueryParameterDateTimeSecRange{
328+
Value: apv.Value,
329+
}
279330
default:
280331
log.Fatalf("Don't know what to do for type: %#v", reflect.TypeOf(apv).String())
281332
}

sqlanalytics/resource_query_test.go

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,21 @@ func TestQueryUpdateWithParams(t *testing.T) {
205205
Name: "7",
206206
},
207207
},
208+
api.QueryParameterDateRange{
209+
QueryParameter: api.QueryParameter{
210+
Name: "8",
211+
},
212+
},
213+
api.QueryParameterDateTimeRange{
214+
QueryParameter: api.QueryParameter{
215+
Name: "9",
216+
},
217+
},
218+
api.QueryParameterDateTimeSecRange{
219+
QueryParameter: api.QueryParameter{
220+
Name: "10",
221+
},
222+
},
208223
},
209224
},
210225
}
@@ -316,6 +331,27 @@ func TestQueryUpdateWithParams(t *testing.T) {
316331
value = ""
317332
}
318333
}
334+
335+
parameter {
336+
name = "8"
337+
date_range {
338+
value = ""
339+
}
340+
}
341+
342+
parameter {
343+
name = "9"
344+
datetime_range {
345+
value = ""
346+
}
347+
}
348+
349+
parameter {
350+
name = "10"
351+
datetimesec_range {
352+
value = ""
353+
}
354+
}
319355
`,
320356
}.Apply(t)
321357

@@ -325,7 +361,7 @@ func TestQueryUpdateWithParams(t *testing.T) {
325361
assert.Equal(t, "xyz", d.Get("data_source_id"))
326362
assert.Equal(t, "Updated name", d.Get("name"))
327363
assert.Equal(t, "SELECT 1, 2, 3, 4", d.Get("query"))
328-
assert.Len(t, d.Get("parameter").([]interface{}), 9)
364+
assert.Len(t, d.Get("parameter").([]interface{}), 12)
329365
}
330366

331367
func TestQueryDelete(t *testing.T) {

0 commit comments

Comments
 (0)