summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-07-07 10:54:13 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-07-07 15:08:15 +0200
commit84265775e56e2203199ff4d841d04b2213e97234 (patch)
tree71c0a49a8637c5a9c7dd2dcff2a9641f0471f56c /lib
parentfb89ba24825853ca29b804a4a08f7c83210f09db (diff)
downloadgitlab-ce-84265775e56e2203199ff4d841d04b2213e97234.tar.gz
Add some comments on new migrations helpers
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/database/migration_helpers.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/gitlab/database/migration_helpers.rb b/lib/gitlab/database/migration_helpers.rb
index b6883704da0..ca7e4c8aa7c 100644
--- a/lib/gitlab/database/migration_helpers.rb
+++ b/lib/gitlab/database/migration_helpers.rb
@@ -255,6 +255,25 @@ module Gitlab
end
end
+ ##
+ # Iterates a table and executes a block for given range.
+ #
+ # Yields batch index, start and stop ids.
+ #
+ # Optional `scope` keyword argument is a closure that is meant to limit
+ # the scope the statement is going to be applied onto.
+ #
+ # Arel statement this helper will execute must be defined inside the
+ # block.
+ #
+ # Example:
+ #
+ # scope = ->(table, query) { query.where(table[:id].gt(100) }
+ #
+ # walk_table_in_batches(:table, of: 10, scope: scope) do |index, start, stop|
+ # # do something here
+ # end
+ #
def walk_table_in_batches(table, of: 1000, scope: nil)
if transaction_open?
raise <<-MSG
@@ -287,6 +306,25 @@ module Gitlab
end
end
+ ##
+ # Executes an SQL statement in batches, created by Arel manager.
+ #
+ # Optional `scope` keyword argument is a closure that is meant to limit
+ # the scope the statement is going to be applied onto.
+ #
+ # Arel statement this helper will execute must be defined inside the
+ # block.
+ #
+ # Example:
+ #
+ # scope = ->(table, query) { query.where(table[:id].gt(100) }
+ #
+ # execute_in_batches(:table, of: 10000, scope: scope) do |table|
+ # Arel::UpdateManager.new(ActiveRecord::Base)
+ # .table(table)
+ # .set([[table[:field], 101]])
+ # end
+ #
def execute_in_batches(table, of: 1000, scope: nil)
if transaction_open?
raise <<-MSG