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

Method Query

backend/api/v1/sql_service.go:304–468  ·  view source on GitHub ↗
(ctx context.Context, req *connect.Request[v1pb.QueryRequest])

Source from the content-addressed store, hash-verified

302}
303
304func (s *SQLService) Query(ctx context.Context, req *connect.Request[v1pb.QueryRequest]) (*connect.Response[v1pb.QueryResponse], error) {
305 request := req.Msg
306 // Prepare related message.
307 user, instance, database, err := s.prepareRelatedMessage(ctx, request.Name)
308 if err != nil {
309 return nil, err
310 }
311
312 accessGrant := s.preCheckAccess(ctx, request.Statement, instance, database, false /* requireExport */)
313
314 statement := request.Statement
315 // In Redshift datashare, Rewrite query used for parser.
316 if database.Metadata.GetDatashare() {
317 statement = strings.ReplaceAll(statement, fmt.Sprintf("%s.", database.DatabaseName), "")
318 }
319
320 // Validate the request.
321 // New query ACL experience.
322 if !request.Explain && !common.EngineSupportQueryNewACL(instance.Metadata.GetEngine()) {
323 if err := validateQueryRequest(instance, statement); err != nil {
324 return nil, err
325 }
326 }
327
328 queryDataPolicy := getEffectiveQueryDataPolicy(
329 ctx,
330 s.store,
331 s.licenseService,
332 0,
333 database.ProjectID,
334 )
335 resolvedDataSourceID, err := resolveDataSourceID(ctx, instance, request.DataSourceId, statement, queryDataPolicy.AllowAdminDataSource)
336 if err != nil {
337 return nil, err
338 }
339
340 dataSource, err := checkAndGetDataSourceQueriable(ctx, s.store, s.licenseService, database, resolvedDataSourceID)
341 if err != nil {
342 return nil, err
343 }
344 driver, err := s.dbFactory.GetDataSourceDriver(ctx, instance, dataSource, db.ConnectionContext{
345 DatabaseName: database.DatabaseName,
346 DataShare: database.Metadata.GetDatashare(),
347 ReadOnly: dataSource.GetType() == storepb.DataSourceType_READ_ONLY,
348 })
349 if err != nil {
350 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("failed to get database driver: %v", err))
351 }
352 defer driver.Close(ctx)
353
354 sqlDB := driver.GetDB()
355 var conn *sql.Conn
356 if sqlDB != nil {
357 conn, err = sqlDB.Conn(ctx)
358 if err != nil {
359 return nil, connect.NewError(connect.CodeInternal, errors.Errorf("failed to get database connection: %v", err))
360 }
361 defer conn.Close()

Callers

nothing calls this directly

Calls 15

prepareRelatedMessageMethod · 0.95
preCheckAccessMethod · 0.95
accessCheckWithGrantMethod · 0.95
createQueryHistoryMethod · 0.95
EngineSupportQueryNewACLFunction · 0.92
BBErrorFunction · 0.92
FormatAccessGrantFunction · 0.92
validateQueryRequestFunction · 0.85
resolveDataSourceIDFunction · 0.85
queryRetryStopOnErrorFunction · 0.85

Tested by

no test coverage detected