Class: Gitlab::Pagination::Keyset::InOperatorOptimization::ArrayScopeColumns

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

Constant Summary collapse

ARRAY_SCOPE_CTE_NAME =
'array_cte'

Instance Method Summary collapse

Constructor Details

#initialize(columns) ⇒ ArrayScopeColumns

Returns a new instance of ArrayScopeColumns.



10
11
12
13
14
15
16
17
18
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/array_scope_columns.rb', line 10

def initialize(columns)
  validate_columns!(columns)

  array_scope_table = Arel::Table.new(ARRAY_SCOPE_CTE_NAME)
  @columns = columns.map do |column|
    column = column.right if column.is_a?(Arel::Nodes::As)
    ColumnData.new(column, "array_scope_#{column}", array_scope_table)
  end
end

Instance Method Details

#arel_columnsObject



32
33
34
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/array_scope_columns.rb', line 32

def arel_columns
  columns.map(&:arel_column)
end

#array_aggregated_column_namesObject



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

def array_aggregated_column_names
  columns.map(&:array_aggregated_column_name)
end

#array_aggregated_columnsObject



24
25
26
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/array_scope_columns.rb', line 24

def array_aggregated_columns
  columns.map(&:array_aggregated_column)
end

#array_lookup_expressions_by_position(table_name) ⇒ Object



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

def array_lookup_expressions_by_position(table_name)
  columns.map do |column|
    Arel.sql("#{table_name}.#{column.array_aggregated_column_name}[position]")
  end
end

#array_scope_cte_nameObject



20
21
22
# File 'lib/gitlab/pagination/keyset/in_operator_optimization/array_scope_columns.rb', line 20

def array_scope_cte_name
  ARRAY_SCOPE_CTE_NAME
end