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

Method executeQuery

pgserver/duck_handler.go:406–488  ·  view source on GitHub ↗

executeQuery 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, parsed tree.Statement, _ *duckdb.Stmt, _ []any)

Source from the content-addressed store, hash-verified

404// executeQuery is a QueryExecutor that calls QueryWithBindings on the given engine using the given query and parsed
405// statement, which may be nil.
406func (h *DuckHandler) executeQuery(ctx *sql.Context, query string, parsed tree.Statement, _ *duckdb.Stmt, _ []any) (sql.Schema, sql.RowIter, *sql.QueryFlags, error) {
407 // return h.e.QueryWithBindings(ctx, query, parsed, nil, nil)
408
409 sql.IncrementStatusVariable(ctx, "Questions", 1)
410 if _, ok := parsed.(*tree.Select); ok {
411 sql.IncrementStatusVariable(ctx, "Com_select", 1)
412 }
413
414 var (
415 schema sql.Schema
416 iter sql.RowIter
417 rows *stdsql.Rows
418 result stdsql.Result
419 err error
420 )
421
422 // NOTE: The query is parsed using Postgres parser, which does not support all DuckDB syntax.
423 // Consequently, the following classification is not perfect.
424 switch parsed.(type) {
425 case *tree.BeginTransaction, *tree.CommitTransaction, *tree.RollbackTransaction,
426 *tree.CreateTable, *tree.DropTable, *tree.AlterTable, *tree.CreateIndex, *tree.DropIndex,
427 *tree.Insert, *tree.Update, *tree.Delete, *tree.Truncate, *tree.CopyFrom, *tree.CopyTo, *tree.SetVar:
428 result, err = adapter.Exec(ctx, query)
429 if err != nil {
430 break
431 }
432 affected, _ := result.RowsAffected()
433 insertId, _ := result.LastInsertId()
434 schema = types.OkResultSchema
435 iter = sql.RowsToRowIter(sql.NewRow(types.OkResult{
436 RowsAffected: uint64(affected),
437 InsertID: uint64(insertId),
438 }))
439 case *tree.CreateDatabase:
440 provider := h.GetCatalogProvider()
441 if provider == nil {
442 err = fmt.Errorf("database provider not found")
443 break
444 }
445 p := parsed.(*tree.CreateDatabase)
446 dbName := p.Name.String()
447 err = provider.CreateCatalog(dbName, p.IfNotExists)
448 if err != nil {
449 break
450 }
451 schema = types.OkResultSchema
452 iter = sql.RowsToRowIter(sql.NewRow(types.OkResult{}))
453 case *tree.DropDatabase:
454 provider := h.GetCatalogProvider()
455 if provider == nil {
456 err = fmt.Errorf("database provider not found")
457 break
458 }
459 p := parsed.(*tree.DropDatabase)
460 dbName := parsed.(*tree.DropDatabase).Name.String()
461 err = provider.DropCatalog(dbName, p.IfExists)
462 if err != nil {
463 break

Callers

nothing calls this directly

Calls 9

GetCatalogProviderMethod · 0.95
ExecFunction · 0.92
QueryCatalogFunction · 0.92
InferSchemaFunction · 0.92
NewSQLRowIterFunction · 0.92
CreateCatalogMethod · 0.80
DropCatalogMethod · 0.80
CloseMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected