MCPcopy Create free account
hub / github.com/araddon/qlbridge / Query

Method Query

exec/sqldriver.go:228–280  ·  view source on GitHub ↗

Query executes a query that may return rows, such as a SELECT

(args []driver.Value)

Source from the content-addressed store, hash-verified

226
227// Query executes a query that may return rows, such as a SELECT
228func (m *qlbStmt) Query(args []driver.Value) (driver.Rows, error) {
229 var err error
230 if len(args) > 0 {
231 m.query, err = queryArgsConvert(m.query, args)
232 if err != nil {
233 return nil, err
234 }
235 }
236 u.Debugf("query: %v", m.query)
237
238 // Create a Job, which is Dag of Tasks that Run()
239 ctx := plan.NewContext(m.query)
240 ctx.Schema = m.conn.schema
241 job, err := BuildSqlJob(ctx)
242 if err != nil {
243 u.Warnf("return error? %v", err)
244 return nil, err
245 }
246 m.job = job
247
248 // The only type of stmt that makes sense for Query is SELECT
249 // and we need list of columns that requires casing
250 sqlSelect, ok := job.Ctx.Stmt.(*rel.SqlSelect)
251 if !ok {
252 u.Warnf("ctx? %v", job.Ctx)
253 return nil, fmt.Errorf("We could not recognize that as a select query: %T", job.Ctx.Stmt)
254 }
255
256 // Prepare a result writer, we manually append this task to end
257 // of job?
258 resultWriter := NewResultRows(ctx, sqlSelect.Columns.AliasedFieldNames())
259
260 job.RootTask.Add(resultWriter)
261
262 job.Setup()
263
264 // TODO: this can't run in parallel-buffered mode?
265 // how to open in go-routine and still be able to send error to rows?
266 go func() {
267 //u.Debugf("Start Job.Run")
268 err = job.Run()
269 //u.Debugf("After job.Run()")
270 if err != nil {
271 u.Errorf("error on Query.Run(): %v", err)
272 //resultWriter.ErrChan() <- err
273 //job.Close()
274 }
275 job.Close()
276 //u.Debugf("exiting Background Query")
277 }()
278
279 return resultWriter, nil
280}
281
282// driver.ColumnConverter Interface implementation.
283//

Callers 1

QueryMethod · 0.95

Calls 10

NewContextFunction · 0.92
queryArgsConvertFunction · 0.85
BuildSqlJobFunction · 0.85
NewResultRowsFunction · 0.85
ErrorfMethod · 0.80
AliasedFieldNamesMethod · 0.80
AddMethod · 0.65
SetupMethod · 0.65
RunMethod · 0.65
CloseMethod · 0.65

Tested by

no test coverage detected