Skip to content

Commit e9c5582

Browse files
pieternnfx
authored andcommitted
Add date, datetime, and datetime with seconds parameters
1 parent 6ef49d7 commit e9c5582

File tree

3 files changed

+140
-5
lines changed

3 files changed

+140
-5
lines changed

sqlanalytics/api/query.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,12 @@ func (o *QueryOptions) UnmarshalJSON(b []byte) error {
7474
i = &QueryParameterEnum{}
7575
case "query":
7676
i = &QueryParameterQuery{}
77+
case "date":
78+
i = &QueryParameterDate{}
79+
case "datetime-local":
80+
i = &QueryParameterDateTime{}
81+
case "datetime-with-seconds":
82+
i = &QueryParameterDateTimeSec{}
7783
default:
7884
panic("don't know what to do...")
7985
}
@@ -163,3 +169,45 @@ func (p QueryParameterQuery) MarshalJSON() ([]byte, error) {
163169
type localQueryParameter QueryParameterQuery
164170
return json.Marshal((localQueryParameter)(p))
165171
}
172+
173+
// QueryParameterDate ...
174+
type QueryParameterDate struct {
175+
QueryParameter
176+
177+
Value string `json:"value"`
178+
}
179+
180+
// MarshalJSON sets the type before marshaling.
181+
func (p QueryParameterDate) MarshalJSON() ([]byte, error) {
182+
p.QueryParameter.Type = "date"
183+
type localQueryParameter QueryParameterDate
184+
return json.Marshal((localQueryParameter)(p))
185+
}
186+
187+
// QueryParameterDateTime ...
188+
type QueryParameterDateTime struct {
189+
QueryParameter
190+
191+
Value string `json:"value"`
192+
}
193+
194+
// MarshalJSON sets the type before marshaling.
195+
func (p QueryParameterDateTime) MarshalJSON() ([]byte, error) {
196+
p.QueryParameter.Type = "datetime-local"
197+
type localQueryParameter QueryParameterDateTime
198+
return json.Marshal((localQueryParameter)(p))
199+
}
200+
201+
// QueryParameterDateTimeSec ...
202+
type QueryParameterDateTimeSec struct {
203+
QueryParameter
204+
205+
Value string `json:"value"`
206+
}
207+
208+
// MarshalJSON sets the type before marshaling.
209+
func (p QueryParameterDateTimeSec) MarshalJSON() ([]byte, error) {
210+
p.QueryParameter.Type = "datetime-with-seconds"
211+
type localQueryParameter QueryParameterDateTimeSec
212+
return json.Marshal((localQueryParameter)(p))
213+
}

sqlanalytics/resource_query.go

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,13 @@ 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"`
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"`
4245
}
4346

4447
// QueryParameterText ...
@@ -65,6 +68,21 @@ type QueryParameterQuery struct {
6568
Multiple *QueryParameterAllowMultiple `json:"multiple,omitempty"`
6669
}
6770

71+
// QueryParameterDate ...
72+
type QueryParameterDate struct {
73+
Value string `json:"value"`
74+
}
75+
76+
// QueryParameterDateTime ...
77+
type QueryParameterDateTime struct {
78+
Value string `json:"value"`
79+
}
80+
81+
// QueryParameterDateTimeSec ...
82+
type QueryParameterDateTimeSec struct {
83+
Value string `json:"value"`
84+
}
85+
6886
// QueryParameterAllowMultiple ...
6987
type QueryParameterAllowMultiple struct {
7088
Prefix string `json:"prefix"`
@@ -162,6 +180,21 @@ func (r *queryResource) toAPIObject(d *schema.ResourceData) (*api.Query, error)
162180
tmp.Multi = p.Query.Multiple.toAPIObject()
163181
}
164182
iface = tmp
183+
case p.Date != nil:
184+
iface = api.QueryParameterDate{
185+
QueryParameter: ap,
186+
Value: p.Date.Value,
187+
}
188+
case p.DateTime != nil:
189+
iface = api.QueryParameterDateTime{
190+
QueryParameter: ap,
191+
Value: p.DateTime.Value,
192+
}
193+
case p.DateTimeSec != nil:
194+
iface = api.QueryParameterDateTimeSec{
195+
QueryParameter: ap,
196+
Value: p.DateTimeSec.Value,
197+
}
165198
default:
166199
log.Fatalf("Don't know what to do for QueryParameter...")
167200
}
@@ -225,6 +258,24 @@ func (r *queryResource) fromAPIObject(aq *api.Query, d *schema.ResourceData) err
225258
QueryID: apv.QueryID,
226259
Multiple: newQueryParameterAllowMultiple(apv.Multi),
227260
}
261+
case *api.QueryParameterDate:
262+
p.Name = apv.Name
263+
p.Title = apv.Title
264+
p.Date = &QueryParameterDate{
265+
Value: apv.Value,
266+
}
267+
case *api.QueryParameterDateTime:
268+
p.Name = apv.Name
269+
p.Title = apv.Title
270+
p.DateTime = &QueryParameterDateTime{
271+
Value: apv.Value,
272+
}
273+
case *api.QueryParameterDateTimeSec:
274+
p.Name = apv.Name
275+
p.Title = apv.Title
276+
p.DateTimeSec = &QueryParameterDateTimeSec{
277+
Value: apv.Value,
278+
}
228279
default:
229280
log.Fatalf("Don't know what to do for type: %#v", reflect.TypeOf(apv).String())
230281
}

sqlanalytics/resource_query_test.go

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,21 @@ func TestQueryUpdateWithParams(t *testing.T) {
190190
QueryID: "abc",
191191
Multi: nil,
192192
},
193+
api.QueryParameterDate{
194+
QueryParameter: api.QueryParameter{
195+
Name: "5",
196+
},
197+
},
198+
api.QueryParameterDateTime{
199+
QueryParameter: api.QueryParameter{
200+
Name: "6",
201+
},
202+
},
203+
api.QueryParameterDateTimeSec{
204+
QueryParameter: api.QueryParameter{
205+
Name: "7",
206+
},
207+
},
193208
},
194209
},
195210
}
@@ -280,6 +295,27 @@ func TestQueryUpdateWithParams(t *testing.T) {
280295
}
281296
}
282297
}
298+
299+
parameter {
300+
name = "5"
301+
date {
302+
value = ""
303+
}
304+
}
305+
306+
parameter {
307+
name = "6"
308+
datetime {
309+
value = ""
310+
}
311+
}
312+
313+
parameter {
314+
name = "7"
315+
datetimesec {
316+
value = ""
317+
}
318+
}
283319
`,
284320
}.Apply(t)
285321

@@ -289,7 +325,7 @@ func TestQueryUpdateWithParams(t *testing.T) {
289325
assert.Equal(t, "xyz", d.Get("data_source_id"))
290326
assert.Equal(t, "Updated name", d.Get("name"))
291327
assert.Equal(t, "SELECT 1, 2, 3, 4", d.Get("query"))
292-
assert.Len(t, d.Get("parameter").([]interface{}), 6)
328+
assert.Len(t, d.Get("parameter").([]interface{}), 9)
293329
}
294330

295331
func TestQueryDelete(t *testing.T) {

0 commit comments

Comments
 (0)