Class: Gitlab::Database::Aggregation::QueryPlan
- Inherits:
-
Object
- Object
- Gitlab::Database::Aggregation::QueryPlan
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
#engine ⇒ Object
Returns the value of attribute engine.
9
10
11
|
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 9
def engine
@engine
end
|
#request ⇒ Object
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
#dimensions ⇒ Object
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
|
#filters ⇒ Object
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
|
#metrics ⇒ Object
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
|
#order ⇒ Object
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_parts ⇒ Object
57
58
59
|
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 57
def orderable_parts
dimensions + metrics
end
|
#parts ⇒ Object
61
62
63
|
# File 'lib/gitlab/database/aggregation/query_plan.rb', line 61
def parts
filters + dimensions + metrics + order
end
|