MCPcopy Index your code
hub / github.com/bytebase/bytebase / QueryConn

Method QueryConn

backend/plugin/db/bigquery/bigquery.go:112–216  ·  view source on GitHub ↗

QueryConn queries a SQL statement in a given connection.

(ctx context.Context, _ *sql.Conn, statement string, queryContext db.QueryContext)

Source from the content-addressed store, hash-verified

110
111// QueryConn queries a SQL statement in a given connection.
112func (d *Driver) QueryConn(ctx context.Context, _ *sql.Conn, statement string, queryContext db.QueryContext) ([]*v1pb.QueryResult, error) {
113 // For BigQuery, interpret Explain as dry run (BigQuery doesn't support EXPLAIN)
114 if queryContext.Explain {
115 return d.dryRunQuery(ctx, statement, queryContext)
116 }
117
118 statements, err := util.SanitizeSQL(statement)
119 if err != nil {
120 return nil, err
121 }
122
123 var results []*v1pb.QueryResult
124 for _, statement := range statements {
125 startTime := time.Now()
126 queryResult, err := func() (*v1pb.QueryResult, error) {
127 if util.IsSelect(statement) {
128 if queryContext.Limit > 0 {
129 statement = getStatementWithResultLimit(statement, queryContext.Limit)
130 }
131 q := d.client.Query(statement)
132 if queryContext.OperatorEmail != "" {
133 q.Labels = map[string]string{"operator_email": encodeOperatorEmail(queryContext.OperatorEmail)}
134 }
135 q.DefaultDatasetID = d.databaseName
136 it, err := q.Read(ctx)
137 if err != nil {
138 return nil, err
139 }
140
141 result := &v1pb.QueryResult{}
142 readOnce := false
143 var fieldTypes []bigquery.FieldType
144 for {
145 var values []bigquery.Value
146 err := it.Next(&values)
147 if err == iterator.Done {
148 break
149 }
150 if err != nil {
151 return nil, err
152 }
153
154 // Get schema columns.
155 if !readOnce {
156 readOnce = true
157 for _, s := range it.Schema {
158 result.ColumnNames = append(result.ColumnNames, s.Name)
159 result.ColumnTypeNames = append(result.ColumnTypeNames, string(s.Type))
160 fieldTypes = append(fieldTypes, s.Type)
161 }
162 }
163
164 row := &v1pb.QueryRow{}
165 for i, v := range values {
166 row.Values = append(row.Values, convertValue(v, fieldTypes[i]))
167 }
168 result.Rows = append(result.Rows, row)
169 n := len(result.Rows)

Callers

nothing calls this directly

Implementers 15

MockDriverbackend/plugin/advisor/utils_for_tests
Driverbackend/plugin/db/bigquery/bigquery.go
Driverbackend/plugin/db/mongodb/mongodb.go
Driverbackend/plugin/db/trino/trino.go
Driverbackend/plugin/db/redshift/redshift.go
Driverbackend/plugin/db/oracle/oracle.go
Driverbackend/plugin/db/dynamodb/dynamodb.go
Driverbackend/plugin/db/cosmosdb/cosmosdb.go
Driverbackend/plugin/db/spanner/spanner.go
Driverbackend/plugin/db/mssql/mssql.go
Driverbackend/plugin/db/mysql/mysql.go
Driverbackend/plugin/db/pg/pg.go

Calls 12

dryRunQueryMethod · 0.95
SanitizeSQLFunction · 0.92
IsSelectFunction · 0.92
BuildAffectedRowsResultFunction · 0.92
encodeOperatorEmailFunction · 0.85
convertValueFunction · 0.70
QueryMethod · 0.65
NextMethod · 0.45
RunMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected