Skip to content

Commit 88aca14

Browse files
authored
Implement Query.Run (#174)
* Implement Query.Run * rename job.err to job.waitErr
1 parent b560b21 commit 88aca14

File tree

2 files changed

+94
-8
lines changed

2 files changed

+94
-8
lines changed

cloudtest/bqfake/bqfake.go

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,9 @@ func (q Query) SetQueryConfig(bqiface.QueryConfig) {
192192
}
193193

194194
func (q Query) Run(context.Context) (bqiface.Job, error) {
195-
log.Println("Run not implemented")
196-
return Job{}, nil
195+
status := &bigquery.JobStatus{State: 0}
196+
job := NewJob(status, q.config, nil)
197+
return job, nil
197198
}
198199

199200
func (q Query) Read(context.Context) (bqiface.RowIterator, error) {
@@ -230,21 +231,35 @@ func (l Loader) SetLoadConfig(config bqiface.LoadConfig) {}
230231
// unit tests.
231232
type Job struct {
232233
bqiface.Job
233-
status *bigquery.JobStatus
234-
err error
234+
status *bigquery.JobStatus
235+
config QueryConfig
236+
waitErr error
235237
}
236238

237239
// NewJob returns a new instance of Job.
238-
func NewJob(status *bigquery.JobStatus, err error) *Job {
240+
func NewJob(status *bigquery.JobStatus, config QueryConfig, err error) *Job {
239241
return &Job{
240242
status: status,
241-
err: err,
243+
config: config,
244+
waitErr: err,
242245
}
243246
}
244247

245248
// Wait returns a *bigquery.JobStatus and an error.
246249
func (j Job) Wait(context.Context) (*bigquery.JobStatus, error) {
247-
return j.status, j.err
250+
return j.status, j.waitErr
251+
}
252+
253+
func (j Job) LastStatus() *bigquery.JobStatus {
254+
log.Println("LastStatus not implemented")
255+
return nil
256+
}
257+
258+
func (j Job) Read(context.Context) (bqiface.RowIterator, error) {
259+
if j.config.ReadErr != nil {
260+
return nil, j.config.ReadErr
261+
}
262+
return &RowIterator{config: j.config.RowIteratorConfig}, nil
248263
}
249264

250265
type RowIterator struct {

cloudtest/bqfake/bqfake_test.go

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ func TestLoaderRun(t *testing.T) {
430430
func TestJobWait(t *testing.T) {
431431
status := &bigquery.JobStatus{State: 1}
432432
err := errors.New("job error")
433-
job := bqfake.NewJob(status, err)
433+
job := bqfake.NewJob(status, bqfake.QueryConfig{}, err)
434434
got, gotErr := job.Wait(context.Background())
435435

436436
if !errors.Is(gotErr, err) {
@@ -441,3 +441,74 @@ func TestJobWait(t *testing.T) {
441441
t.Errorf("Job.Wait() got = %v, want = %v", got, job)
442442
}
443443
}
444+
445+
func TestNewQueryRunClient(t *testing.T) {
446+
tests := []struct {
447+
name string
448+
config bqfake.QueryConfig
449+
wantErr bool
450+
}{
451+
{
452+
name: "success",
453+
config: bqfake.QueryConfig{
454+
RowIteratorConfig: bqfake.RowIteratorConfig{
455+
Rows: []map[string]bigquery.Value{
456+
{"okay": 1.234},
457+
},
458+
},
459+
},
460+
},
461+
{
462+
name: "read-error",
463+
config: bqfake.QueryConfig{
464+
ReadErr: fmt.Errorf("Fake read error"),
465+
},
466+
wantErr: true,
467+
},
468+
{
469+
name: "iter-error",
470+
config: bqfake.QueryConfig{
471+
RowIteratorConfig: bqfake.RowIteratorConfig{
472+
IterErr: fmt.Errorf("Fake iter error"),
473+
},
474+
},
475+
wantErr: true,
476+
},
477+
}
478+
for _, tt := range tests {
479+
t.Run(tt.name, func(t *testing.T) {
480+
var err error
481+
c := bqfake.NewQueryReadClient(tt.config)
482+
q := c.Query("SELECT 'fake-query-string'")
483+
job, err := q.Run(context.Background())
484+
if err != nil && !tt.wantErr {
485+
t.Errorf("Query().Run() error = %v", err)
486+
}
487+
it, err := job.Read(context.Background())
488+
if err != nil && !tt.wantErr {
489+
t.Errorf("Query().Read() error = %v", err)
490+
}
491+
if it == nil {
492+
return
493+
}
494+
var row map[string]bigquery.Value
495+
i := 0
496+
for err = it.Next(&row); err == nil; err = it.Next(&row) {
497+
if len(tt.config.RowIteratorConfig.Rows) > 0 &&
498+
!reflect.DeepEqual(row, tt.config.RowIteratorConfig.Rows[i]) {
499+
t.Errorf("UpdateSchemaDescription() schema mismatch; got %#v, want %#v",
500+
row, tt.config.RowIteratorConfig.Rows[i])
501+
}
502+
i++
503+
}
504+
if err == iterator.Done {
505+
return
506+
}
507+
// err != nil.
508+
if err != tt.config.RowIteratorConfig.IterErr {
509+
t.Errorf("Next() error; got %v, want %v", err, tt.config.RowIteratorConfig.IterErr)
510+
return
511+
}
512+
})
513+
}
514+
}

0 commit comments

Comments
 (0)