MCPcopy Create free account
hub / github.com/bytebase/bytebase / QueryConn

Method QueryConn

backend/plugin/db/clickhouse/query.go:34–103  ·  view source on GitHub ↗

QueryConn queries a SQL statement in a given connection.

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

Source from the content-addressed store, hash-verified

32
33// QueryConn queries a SQL statement in a given connection.
34func (*Driver) QueryConn(ctx context.Context, conn *sql.Conn, statement string, queryContext db.QueryContext) ([]*v1pb.QueryResult, error) {
35 singleSQLs, err := standard.SplitSQL(statement)
36 if err != nil {
37 return nil, err
38 }
39 singleSQLs = base.FilterEmptyStatements(singleSQLs)
40 if len(singleSQLs) == 0 {
41 return nil, nil
42 }
43
44 var results []*v1pb.QueryResult
45 for _, singleSQL := range singleSQLs {
46 statement := singleSQL.Text
47 if queryContext.Explain {
48 statement = fmt.Sprintf("EXPLAIN %s", statement)
49 } else if queryContext.Limit > 0 {
50 statement = getStatementWithResultLimit(statement, queryContext.Limit)
51 }
52 _, allQuery, err := base.ValidateSQLForEditor(storepb.Engine_CLICKHOUSE, statement)
53 if err != nil {
54 return nil, err
55 }
56
57 startTime := time.Now()
58 queryResult, err := func() (*v1pb.QueryResult, error) {
59 if allQuery {
60 rows, err := conn.QueryContext(ctx, statement)
61 if err != nil {
62 return nil, err
63 }
64 defer rows.Close()
65 r, err := util.RowsToQueryResult(rows, makeValueByTypeName, convertValue, queryContext.MaximumSQLResultSize)
66 if err != nil {
67 return nil, err
68 }
69 if err := rows.Err(); err != nil {
70 return nil, err
71 }
72 return r, nil
73 }
74
75 sqlResult, err := conn.ExecContext(ctx, statement)
76 if err != nil {
77 return nil, err
78 }
79 affectedRows, err := sqlResult.RowsAffected()
80 if err != nil {
81 slog.Error("rowsAffected returns error", log.BBError(err))
82 }
83 return util.BuildAffectedRowsResult(affectedRows, nil), nil
84 }()
85 stop := false
86 if err != nil {
87 err = translateAggregateFunctionError(err)
88 queryResult = &v1pb.QueryResult{
89 Error: err.Error(),
90 }
91 stop = true

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 11

SplitSQLFunction · 0.92
FilterEmptyStatementsFunction · 0.92
ValidateSQLForEditorFunction · 0.92
RowsToQueryResultFunction · 0.92
BBErrorFunction · 0.92
BuildAffectedRowsResultFunction · 0.92
QueryContextMethod · 0.80
CloseMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected