Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb')
-rw-r--r--lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb19
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb b/lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb
index 3f620f74eca..93b28661bb0 100644
--- a/lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb
+++ b/lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb
@@ -4,23 +4,35 @@ module Gitlab
module Pagination
module Keyset
module InOperatorOptimization
+ # 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.
class ColumnData
attr_reader :original_column_name, :as, :arel_table
- def initialize(original_column_name, as, arel_table)
- @original_column_name = original_column_name.to_s
+ # column - name of the DB column
+ # as - custom alias for the column
+ # arel_table - relation where the column is located
+ def initialize(column, as, arel_table)
+ @original_column_name = column
@as = as.to_s
@arel_table = arel_table
end
+ # Generates: `issues.name AS my_alias`
def projection
arel_column.as(as)
end
+ # Generates: issues.name`
def arel_column
arel_table[original_column_name]
end
+ # overridden in OrderByColumnData class
+ alias_method :column_expression, :arel_column
+
+ # Generates: `issues.my_alias`
def arel_column_as
arel_table[as]
end
@@ -29,8 +41,9 @@ module Gitlab
"#{arel_table.name}_#{original_column_name}_array"
end
+ # Generates: SELECT ARRAY_AGG(...) AS issues_name_array
def array_aggregated_column
- Arel::Nodes::NamedFunction.new('ARRAY_AGG', [arel_column]).as(array_aggregated_column_name)
+ Arel::Nodes::NamedFunction.new('ARRAY_AGG', [column_expression]).as(array_aggregated_column_name)
end
end
end