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

Method queryStatement

backend/plugin/db/spanner/spanner.go:392–442  ·  view source on GitHub ↗
(ctx context.Context, statement string, queryContext db.QueryContext)

Source from the content-addressed store, hash-verified

390}
391
392func (d *Driver) queryStatement(ctx context.Context, statement string, queryContext db.QueryContext) (*v1pb.QueryResult, error) {
393 iter := d.client.Single().Query(ctx, spanner.NewStatement(statement))
394 defer iter.Stop()
395
396 row, err := iter.Next()
397 if err == iterator.Done {
398 // Empty result set - return empty QueryResult with column info
399 columnTypeNames, typeErr := getColumnTypeNames(iter)
400 if typeErr != nil {
401 return nil, typeErr
402 }
403 return &v1pb.QueryResult{
404 ColumnNames: getColumnNames(iter),
405 ColumnTypeNames: columnTypeNames,
406 }, nil
407 }
408 if err != nil {
409 return nil, err
410 }
411
412 columnTypeNames, err := getColumnTypeNames(iter)
413 if err != nil {
414 return nil, err
415 }
416 result := &v1pb.QueryResult{
417 ColumnNames: getColumnNames(iter),
418 ColumnTypeNames: columnTypeNames,
419 }
420
421 for {
422 rowData, err := readRow(row)
423 if err != nil {
424 return nil, err
425 }
426 result.Rows = append(result.Rows, rowData)
427 n := len(result.Rows)
428 if (n&(n-1) == 0) && int64(proto.Size(result)) > queryContext.MaximumSQLResultSize {
429 result.Error = common.FormatMaximumSQLResultSizeMessage(queryContext.MaximumSQLResultSize)
430 break
431 }
432
433 row, err = iter.Next()
434 if err == iterator.Done {
435 break
436 }
437 if err != nil {
438 return nil, err
439 }
440 }
441 return result, nil
442}
443
444// convertSpannerValue converts google.protobuf.Value to RowValue.
445// Uses type metadata to preserve INT64 precision and properly handle all Spanner types.

Callers 1

QueryConnMethod · 0.95

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 7

getColumnTypeNamesFunction · 0.85
getColumnNamesFunction · 0.85
readRowFunction · 0.85
StopMethod · 0.80
QueryMethod · 0.65
NextMethod · 0.45

Tested by

no test coverage detected