Class: Gitlab::Pagination::Keyset::InOperatorOptimization::ColumnData
- Inherits:
-
Object
- Object
- Gitlab::Pagination::Keyset::InOperatorOptimization::ColumnData
- 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
Instance Attribute Summary collapse
-
#arel_table ⇒ Object
readonly
Returns the value of attribute arel_table.
-
#as ⇒ Object
readonly
Returns the value of attribute as.
-
#original_column_name ⇒ Object
readonly
Returns the value of attribute original_column_name.
Instance Method Summary collapse
-
#arel_column ⇒ Object
(also: #column_expression)
Generates: issues.name`.
-
#arel_column_as ⇒ Object
Generates: ‘issues.my_alias`.
-
#array_aggregated_column ⇒ Object
Generates: SELECT ARRAY_AGG(…) AS issues_name_array.
- #array_aggregated_column_name ⇒ Object
-
#initialize(column, as, arel_table) ⇒ ColumnData
constructor
column - name of the DB column as - custom alias for the column arel_table - relation where the column is located.
-
#projection ⇒ Object
Generates: ‘issues.name AS my_alias`.
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_table ⇒ Object (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 |
#as ⇒ Object (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_name ⇒ Object (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_column ⇒ Object 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_as ⇒ Object
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_column ⇒ Object
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_name ⇒ Object
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 |
#projection ⇒ Object
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 |