Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion driver/connection.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,38 @@
package driver

import (
"cloud.google.com/go/bigquery"
"context"
"database/sql/driver"
"fmt"

"cloud.google.com/go/bigquery"
)

// DatasetProvider is an interface that provides access to the underlying
// BigQuery dataset. This interface can be used to access the BigQuery client
// for operations that are not supported by the standard database/sql interface,
// such as updating table clustering.
//
// Usage with database/sql:
//
// conn, err := db.Conn(ctx)
// if err != nil {
// return err
// }
// defer conn.Close()
//
// err = conn.Raw(func(driverConn interface{}) error {
// if provider, ok := driverConn.(driver.DatasetProvider); ok {
// dataset := provider.GetDataset()
// // do operations on the dataset
// }
// return errors.New("connection does not implement DatasetProvider")
// })
type DatasetProvider interface {
// GetDataset returns the BigQuery dataset for the current connection.
GetDataset() *bigquery.Dataset
}

type bigQueryConnection struct {
ctx context.Context
client *bigquery.Client
Expand All @@ -16,6 +42,9 @@ type bigQueryConnection struct {
dataset *bigquery.Dataset
}

// Ensure bigQueryConnection implements DatasetProvider
var _ DatasetProvider = (*bigQueryConnection)(nil)

func (connection *bigQueryConnection) GetDataset() *bigquery.Dataset {
if connection.dataset != nil {
return connection.dataset
Expand Down