MCPcopy Create free account
hub / github.com/apecloud/myduckserver / doQuery

Method doQuery

pgserver/duck_handler.go:314–398  ·  view source on GitHub ↗
(ctx context.Context, c *mysql.Conn, query string, parsed tree.Statement, stmt *duckdb.Stmt, vars []any, resultFormatCodes []int16, mode QueryMode, queryExec QueryExecutor, callback func(*Result) error)

Source from the content-addressed store, hash-verified

312 }
313 var tag string
314 err = conn.Raw(func(driverConn any) error {
315 c := driverConn.(*duckdb.Conn)
316 s, err := c.PrepareContext(sqlCtx, query)
317 if err != nil {
318 return err
319 }
320 defer s.Close()
321 stmt := s.(*duckdb.Stmt)
322 tag = GetStatementTag(stmt)
323 return nil
324 })
325 return tag, err
326}
327
328var queryLoggingRegex = regexp.MustCompile(`[\r\n\t ]+`)
329
330func (h *DuckHandler) doQuery(ctx context.Context, c *mysql.Conn, query string, auditQuery string, parsed tree.Statement, stmt *duckdb.Stmt, vars []any, resultFormatCodes []int16, mode QueryMode, queryExec QueryExecutor, callback func(*Result) error) (returnErr error) {
331 if auditQuery != "" {
332 audit := backend.NewQueryAudit(c, "postgres", auditQuery)
333 originalCallback := callback
334 callback = func(res *Result) error {
335 if err := originalCallback(res); err != nil {
336 return err
337 }
338 audit.AddRows(len(res.Rows))
339 return nil
340 }
341 defer func() {
342 audit.Complete(returnErr)
343 }()
344 }
345
346 sqlCtx, err := h.sm.NewContextWithQuery(ctx, c, query)
347 if err != nil {
348 return err
349 }
350 sqlCtx.GetLogger().WithFields(logrus.Fields{
351 "query": query,
352 "protocol": "postgres",
353 }).Trace("doQuery")
354
355 start := time.Now()
356 var queryStrToLog string
357 if h.encodeLoggedQuery {
358 queryStrToLog = base64.StdEncoding.EncodeToString([]byte(query))
359 } else if logrus.IsLevelEnabled(logrus.DebugLevel) {
360 // this is expensive, so skip this unless we're logging at DEBUG level
361 queryStrToLog = string(queryLoggingRegex.ReplaceAll([]byte(query), []byte(" ")))
362 }
363
364 if queryStrToLog != "" {
365 sqlCtx.SetLogger(sqlCtx.GetLogger().WithField("query", queryStrToLog))
366 }
367 sqlCtx.GetLogger().Debugf("Starting query")
368 sqlCtx.GetLogger().Tracef("beginning execution")
369
370 oCtx := ctx
371

Callers 2

ComExecuteBoundMethod · 0.95
ComQueryMethod · 0.95

Calls 6

resultForMax1RowIterMethod · 0.95
resultForDefaultIterMethod · 0.95
resultForOkIterFunction · 0.85
resultForEmptyIterFunction · 0.85

Tested by

no test coverage detected