Class: Gitlab::Pagination::Keyset::InOperatorOptimization::ColumnData

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb

Overview

This class is used for wrapping an Arel column with convenient helper methods in order to make the query building for the InOperatorOptimization a bit cleaner.

Direct Known Subclasses

OrderByColumnData

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(column, as, arel_table) ⇒ ColumnData

column - name of the DB column as - custom alias for the column arel_table - relation where the column is located



16
17
18
19
20
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb', line 16

def initialize(column, as, arel_table)
  @original_column_name = column
  @as = as.to_s
  @arel_table = arel_table
end

Instance Attribute Details

#arel_tableObject (readonly)

Returns the value of attribute arel_table.



11
12
13
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb', line 11

def arel_table
  @arel_table
end

#asObject (readonly)

Returns the value of attribute as.



11
12
13
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb', line 11

def as
  @as
end

#original_column_nameObject (readonly)

Returns the value of attribute original_column_name.



11
12
13
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb', line 11

def original_column_name
  @original_column_name
end

Instance Method Details

#arel_columnObject Also known as: column_expression

Generates: issues.name`



28
29
30
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb', line 28

def arel_column
  arel_table[original_column_name]
end

#arel_column_asObject

Generates: ‘issues.my_alias`



36
37
38
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb', line 36

def arel_column_as
  arel_table[as]
end

#array_aggregated_columnObject

Generates: SELECT ARRAY_AGG(…) AS issues_name_array



45
46
47
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb', line 45

def array_aggregated_column
  Arel::Nodes::NamedFunction.new('ARRAY_AGG', [column_expression]).as(array_aggregated_column_name)
end

#array_aggregated_column_nameObject



40
41
42
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb', line 40

def array_aggregated_column_name
  "#{arel_table.name}_#{original_column_name}_array"
end

#projectionObject

Generates: ‘issues.name AS my_alias`



23
24
25
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb', line 23

def projection
  arel_column.as(as)
end