MCPcopy Index your code
hub / github.com/rilldata/rill / Query

Method Query

runtime/metricsview/executor/executor.go:335–481  ·  view source on GitHub ↗

Query executes the provided query against the metrics view.

(ctx context.Context, qry *metricsview.Query, executionTime *time.Time)

Source from the content-addressed store, hash-verified

333
334// Query executes the provided query against the metrics view.
335func (e *Executor) Query(ctx context.Context, qry *metricsview.Query, executionTime *time.Time) (*drivers.Result, error) {
336 if !e.security.CanAccess() {
337 return nil, runtime.ErrForbidden
338 }
339
340 err := qry.Validate()
341 if err != nil {
342 return nil, err
343 }
344
345 // preserve the original limit, required in 2 phase comparison
346 ogLimit := qry.Limit
347
348 rowsCap, err := e.rewriteQueryEnforceCaps(qry)
349 if err != nil {
350 return nil, err
351 }
352
353 pivotAST, pivoting, err := e.rewriteQueryForPivot(qry)
354 if err != nil {
355 return nil, err
356 }
357
358 if err := e.RewriteQueryTimeRanges(ctx, qry, executionTime); err != nil {
359 return nil, err
360 }
361
362 if err := e.enforceQueryLimits(qry); err != nil {
363 return nil, err
364 }
365
366 if err := e.rewritePercentOfTotals(ctx, qry); err != nil {
367 return nil, err
368 }
369
370 if err := e.rewriteQueryDruidExactify(ctx, qry); err != nil {
371 return nil, err
372 }
373
374 // Check if a rollup table can satisfy the query; if so, use a synthetic spec pointing to it
375 mvForAST := e.metricsView
376 rollupSpec, err := e.rewriteQueryForRollup(ctx, qry)
377 if err != nil {
378 return nil, err
379 }
380 if rollupSpec != nil {
381 mvForAST = rollupSpec
382 }
383
384 ast, err := metricsview.NewAST(mvForAST, e.security, qry, e.olap.Dialect())
385 if err != nil {
386 return nil, err
387 }
388
389 ok, err := e.rewriteTwoPhaseComparisons(ctx, qry, ast, ogLimit)
390 if err != nil {
391 return nil, err
392 } // TODO if !ok then can log a warning that two phase comparison is not possible with a reason

Callers 1

Tested by

no test coverage detected