Class: Gitlab::Database::Aggregation::QueryPlan

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Validations
Defined in:
lib/gitlab/database/aggregation/query_plan.rb,
lib/gitlab/database/aggregation/query_plan/order.rb,
lib/gitlab/database/aggregation/query_plan/filter.rb,
lib/gitlab/database/aggregation/query_plan/metric.rb,
lib/gitlab/database/aggregation/query_plan/base_part.rb,
lib/gitlab/database/aggregation/query_plan/dimension.rb

Defined Under Namespace

Classes: BasePart, Dimension, Filter, Metric, Order

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(engine, request) ⇒ QueryPlan

Returns a new instance of QueryPlan.



15
16
17
18
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 15

def initialize(engine, request)
  @engine = engine
  @request = request
end

Instance Attribute Details

#engineObject (readonly)

Returns the value of attribute engine.



9
10
11
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 9

def engine
  @engine
end

#requestObject (readonly)

Returns the value of attribute request.



9
10
11
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 9

def request
  @request
end

Instance Method Details

#dimensionsObject



29
30
31
32
33
34
35
36
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 29

def dimensions
  @dimensions ||= begin
    definitions = engine.class.dimensions.index_by(&:identifier)
    request.dimensions.map do |configuration|
      Dimension.new(definitions[configuration[:identifier]], configuration)
    end
  end
end

#filtersObject



20
21
22
23
24
25
26
27
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 20

def filters
  @filters ||= begin
    definitions = engine.class.filters.index_by(&:identifier)
    request.filters.map do |configuration|
      Filter.new(definitions[configuration[:identifier]], configuration)
    end
  end
end

#metricsObject



38
39
40
41
42
43
44
45
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 38

def metrics
  @metrics ||= begin
    definitions = engine.class.metrics.index_by(&:identifier)
    request.metrics.map do |configuration|
      Metric.new(definitions[configuration[:identifier]], configuration)
    end
  end
end

#orderObject



47
48
49
50
51
52
53
54
55
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 47

def order
  @order ||= request.order.map do |configuration|
    plan_part = orderable_parts.detect do |plan_part|
      configuration.except(:direction) == plan_part.configuration
    end

    Order.new(plan_part, configuration)
  end
end

#orderable_partsObject



57
58
59
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 57

def orderable_parts
  dimensions + metrics
end

#partsObject



61
62
63
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 61

def parts
  filters + dimensions + metrics + order
end