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

Method executeBoundPlan

pgserver/duck_handler.go:492–593  ·  view source on GitHub ↗

executeBoundPlan is a QueryExecutor that calls QueryWithBindings on the given engine using the given query and parsed statement, which may be nil.

(ctx *sql.Context, query string, _ tree.Statement, stmt *duckdb.Stmt, vars []any)

Source from the content-addressed store, hash-verified

490 // return h.e.QueryWithBindings(ctx, query, parsed, nil, nil)
491
492 sql.IncrementStatusVariable(ctx, "Questions", 1)
493 if _, ok := parsed.(*tree.Select); ok {
494 sql.IncrementStatusVariable(ctx, "Com_select", 1)
495 }
496
497 var (
498 schema sql.Schema
499 iter sql.RowIter
500 rows *stdsql.Rows
501 result stdsql.Result
502 err error
503 )
504
505 // NOTE: The query is parsed using Postgres parser, which does not support all DuckDB syntax.
506 // Consequently, the following classification is not perfect.
507 switch parsed := parsed.(type) {
508 case *tree.BeginTransaction, *tree.CommitTransaction, *tree.RollbackTransaction,
509 *tree.CreateTable, *tree.DropTable, *tree.AlterTable, *tree.CreateIndex, *tree.DropIndex,
510 *tree.Update, *tree.Delete, *tree.Truncate, *tree.CopyFrom, *tree.CopyTo, *tree.SetVar:
511 result, err = adapter.Exec(ctx, query)
512 if err != nil {
513 break
514 }
515 affected, _ := result.RowsAffected()
516 insertId, _ := result.LastInsertId()
517 schema = types.OkResultSchema
518 iter = sql.RowsToRowIter(sql.NewRow(types.OkResult{
519 RowsAffected: uint64(affected),
520 InsertID: uint64(insertId),
521 }))
522 case *tree.Insert:
523 if _, ok := postgresInsertReturningRows(parsed); ok {
524 rows, err = adapter.QueryCatalog(ctx, query)
525 if err != nil {
526 break
527 }
528 schema, err = pgtypes.InferSchema(rows)
529 if err != nil {
530 rows.Close()
531 break
532 }
533 iter, err = backend.NewSQLRowIter(rows, schema)
534 if err != nil {
535 rows.Close()
536 }
537 break
538 }
539 result, err = adapter.Exec(ctx, query)
540 if err != nil {
541 break
542 }
543 affected, _ := result.RowsAffected()
544 insertID, _ := result.LastInsertId()
545 schema = types.OkResultSchema
546 iter = sql.RowsToRowIter(sql.NewRow(types.OkResult{
547 RowsAffected: uint64(affected),
548 InsertID: uint64(insertID),
549 }))

Callers

nothing calls this directly

Calls 5

QueryCatalogFunction · 0.92
InferSchemaFunction · 0.92
ExecCatalogFunction · 0.92
NewSqlRowIterFunction · 0.85
CloseMethod · 0.65

Tested by

no test coverage detected