Skip to content

Commit

Permalink
bigquery: restore backwards-compatible Query.TableDefinitions.
Browse files Browse the repository at this point in the history
Commit 5d33b1b moved most of Query's config to the nested QueryConfig
struct, while temporarily retaining the existing fields in Query for
backwards-compatibility. The recently-added Query.TableDefinitions was
unintentionally not retained.  This change restores it, while marking it
as deprected.

Change-Id: Iea505642eb2ea5a3a8be19afa6f8bf8b80a20917
Reviewed-on: https://code-review.googlesource.com/8490
Reviewed-by: Jonathan Amsterdam <jba@google.com>
  • Loading branch information
mcgreevy committed Oct 14, 2016
1 parent b8c1696 commit c6705a9
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
8 changes: 8 additions & 0 deletions bigquery/legacy.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ func (c *Client) Read(ctx context.Context, src ReadSource, options ...ReadOption
Q: src.Q,
DefaultProjectID: src.DefaultProjectID,
DefaultDatasetID: src.DefaultDatasetID,
TableDefinitions: src.TableDefinitions,
}
}
return src.Read(ctx, options...)
Expand Down Expand Up @@ -509,6 +510,13 @@ func (c *Client) query(ctx context.Context, dst *Table, src *Query, options []Op
ProjectId: src.DefaultProjectID,
}
}

if len(src.TableDefinitions) > 0 {
payload.TableDefinitions = make(map[string]bq.ExternalDataConfiguration)
}
for name, data := range src.TableDefinitions {
payload.TableDefinitions[name] = data.externalDataConfig()
}
// end of compatability code.

for _, opt := range options {
Expand Down
13 changes: 13 additions & 0 deletions bigquery/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,13 +104,20 @@ type Query struct {
QueryConfig

// The query to execute. See https://cloud.google.com/bigquery/query-reference for details.
//
// Deprecated: use QueryConfig.Q instead.
Q string

// DefaultProjectID and DefaultDatasetID specify the dataset to use for unqualified table names in the query.
// If DefaultProjectID is set, DefaultDatasetID must also be set.
DefaultProjectID string // Deprecated: use QueryConfig.DefaultProjectID instead.
DefaultDatasetID string // Deprecated: use QueryConfig.DefaultDatasetID instead.

// TableDefinitions describes data sources outside of BigQuery.
// The map keys may be used as table names in the query string.
//
// Deprecated: use QueryConfig.TableDefinitions instead.
TableDefinitions map[string]ExternalData
}

func (q *QueryConfig) implementsSource() {}
Expand Down Expand Up @@ -199,6 +206,12 @@ func (q *Query) Run(ctx context.Context) (*Job, error) {
ProjectId: q.DefaultProjectID,
}
}
if len(q.TableDefinitions) > 0 {
conf.TableDefinitions = make(map[string]bq.ExternalDataConfiguration)
}
for name, data := range q.TableDefinitions {
conf.TableDefinitions[name] = data.externalDataConfig()
}
// end of compatability code.

j, err := q.client.service.insertJob(ctx, job, q.client.projectID)
Expand Down
40 changes: 40 additions & 0 deletions bigquery/query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,7 @@ func TestBackwardsCompatabilityOfQuery(t *testing.T) {
Q: "query string",
DefaultProjectID: "def-project-id",
DefaultDatasetID: "def-dataset-id",
TableDefinitions: map[string]ExternalData{"a": c.NewGCSReference("uri")},
},
want: &bq.Job{
Configuration: &bq.JobConfiguration{
Expand All @@ -393,6 +394,13 @@ func TestBackwardsCompatabilityOfQuery(t *testing.T) {
ProjectId: "def-project-id",
DatasetId: "def-dataset-id",
},
TableDefinitions: map[string]bq.ExternalDataConfiguration{
"a": bq.ExternalDataConfiguration{
CsvOptions: &bq.CsvOptions{},
SourceFormat: "CSV",
SourceUris: []string{"uri"},
},
},
},
},
},
Expand All @@ -402,6 +410,7 @@ func TestBackwardsCompatabilityOfQuery(t *testing.T) {
Q: "query string",
DefaultProjectID: "def-project-id",
DefaultDatasetID: "def-dataset-id",
TableDefinitions: map[string]ExternalData{"a": c.NewGCSReference("uri")},
},
want: &bq.Job{
Configuration: &bq.JobConfiguration{
Expand All @@ -411,6 +420,13 @@ func TestBackwardsCompatabilityOfQuery(t *testing.T) {
ProjectId: "def-project-id",
DatasetId: "def-dataset-id",
},
TableDefinitions: map[string]bq.ExternalDataConfiguration{
"a": bq.ExternalDataConfiguration{
CsvOptions: &bq.CsvOptions{},
SourceFormat: "CSV",
SourceUris: []string{"uri"},
},
},
},
},
},
Expand All @@ -421,6 +437,7 @@ func TestBackwardsCompatabilityOfQuery(t *testing.T) {
Q: "query string",
DefaultProjectID: "def-project-id",
DefaultDatasetID: "def-dataset-id",
TableDefinitions: map[string]ExternalData{"a": c.NewGCSReference("uri")},
},
},
want: &bq.Job{
Expand All @@ -431,6 +448,13 @@ func TestBackwardsCompatabilityOfQuery(t *testing.T) {
ProjectId: "def-project-id",
DatasetId: "def-dataset-id",
},
TableDefinitions: map[string]bq.ExternalDataConfiguration{
"a": bq.ExternalDataConfiguration{
CsvOptions: &bq.CsvOptions{},
SourceFormat: "CSV",
SourceUris: []string{"uri"},
},
},
},
},
},
Expand All @@ -440,6 +464,7 @@ func TestBackwardsCompatabilityOfQuery(t *testing.T) {
q := c.Query("query string")
q.DefaultProjectID = "def-project-id"
q.DefaultDatasetID = "def-dataset-id"
q.TableDefinitions = map[string]ExternalData{"a": c.NewGCSReference("uri")}
return q
}(),
want: &bq.Job{
Expand All @@ -450,6 +475,13 @@ func TestBackwardsCompatabilityOfQuery(t *testing.T) {
ProjectId: "def-project-id",
DatasetId: "def-dataset-id",
},
TableDefinitions: map[string]bq.ExternalDataConfiguration{
"a": bq.ExternalDataConfiguration{
CsvOptions: &bq.CsvOptions{},
SourceFormat: "CSV",
SourceUris: []string{"uri"},
},
},
},
},
},
Expand All @@ -459,6 +491,7 @@ func TestBackwardsCompatabilityOfQuery(t *testing.T) {
q := c.Query("query string")
q.QueryConfig.DefaultProjectID = "def-project-id"
q.QueryConfig.DefaultDatasetID = "def-dataset-id"
q.QueryConfig.TableDefinitions = map[string]ExternalData{"a": c.NewGCSReference("uri")}
return q
}(),
want: &bq.Job{
Expand All @@ -469,6 +502,13 @@ func TestBackwardsCompatabilityOfQuery(t *testing.T) {
ProjectId: "def-project-id",
DatasetId: "def-dataset-id",
},
TableDefinitions: map[string]bq.ExternalDataConfiguration{
"a": bq.ExternalDataConfiguration{
CsvOptions: &bq.CsvOptions{},
SourceFormat: "CSV",
SourceUris: []string{"uri"},
},
},
},
},
},
Expand Down

0 comments on commit c6705a9

Please sign in to comment.