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

Method executeQuery

backend/executor.go:183–219  ·  view source on GitHub ↗
(ctx *sql.Context, n sql.Node, conn *stdsql.Conn)

Source from the content-addressed store, hash-verified

181func (b *DuckBuilder) executeExpressioner(ctx *sql.Context, n sql.Expressioner, conn *stdsql.Conn) (sql.RowIter, error) {
182 node := n.(sql.Node)
183 switch n.(type) {
184 case *plan.InsertInto:
185 return b.executeDML(ctx, node, conn)
186 case *plan.Update:
187 return b.executeDML(ctx, node, conn)
188 default:
189 return b.executeQuery(ctx, node, conn)
190 }
191}
192
193func (b *DuckBuilder) executeQuery(ctx *sql.Context, n sql.Node, conn *stdsql.Conn) (sql.RowIter, error) {
194 ctx.GetLogger().Trace("Executing Query...")
195
196 var (
197 duckSQL string
198 err error
199 )
200
201 // Translate the MySQL query to a DuckDB query
202 switch n := n.(type) {
203 case *plan.ShowTables:
204 duckSQL = ctx.Query()
205 case *plan.ResolvedTable:
206 // SQLGlot cannot translate MySQL's `TABLE t` into DuckDB's `FROM t` - it produces `"table" AS t` instead.
207 duckSQL = `FROM ` + catalog.ConnectIdentifiersANSI(n.Database().Name(), n.Name())
208 default:
209 duckSQL, err = transpiler.TranslateWithSQLGlot(queryForTranslation(ctx))
210 }
211 if err != nil {
212 return nil, catalog.ErrTranspiler.New(err)
213 }
214 duckSQL = QueryForJSONScan(duckSQL, n.Schema())
215
216 if log := ctx.GetLogger(); log.Logger.IsLevelEnabled(logrus.TraceLevel) {
217 log.WithFields(logrus.Fields{
218 "Query": ctx.Query(),
219 "DuckSQL": duckSQL,
220 }).Trace("Executing Query...")
221 }
222

Callers 2

BuildMethod · 0.95
executeExpressionerMethod · 0.95

Calls 7

ConnectIdentifiersANSIFunction · 0.92
TranslateWithSQLGlotFunction · 0.92
NewSQLRowIterFunction · 0.85
QueryContextMethod · 0.80
NameMethod · 0.45
DatabaseMethod · 0.45
SchemaMethod · 0.45

Tested by

no test coverage detected