summaryrefslogtreecommitdiff
path: root/lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb
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.rb39
1 files changed, 39 insertions, 0 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
new file mode 100644
index 00000000000..3f620f74eca
--- /dev/null
+++ b/lib/gitlab/pagination/keyset/in_operator_optimization/column_data.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Pagination
+ module Keyset
+ module InOperatorOptimization
+ 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
+ @as = as.to_s
+ @arel_table = arel_table
+ end
+
+ def projection
+ arel_column.as(as)
+ end
+
+ def arel_column
+ arel_table[original_column_name]
+ end
+
+ def arel_column_as
+ arel_table[as]
+ end
+
+ def array_aggregated_column_name
+ "#{arel_table.name}_#{original_column_name}_array"
+ end
+
+ def array_aggregated_column
+ Arel::Nodes::NamedFunction.new('ARRAY_AGG', [arel_column]).as(array_aggregated_column_name)
+ end
+ end
+ end
+ end
+ end
+end