Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
c12bd5e8
Commit
c12bd5e8
authored
Mar 21, 2018
by
blackst0ne
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Rails5] Update ar5_batching initializer
parent
5ae91f32
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
37 deletions
+35
-37
config/initializers/ar5_batching.rb
config/initializers/ar5_batching.rb
+35
-37
No files found.
config/initializers/ar5_batching.rb
View file @
c12bd5e8
# Port ActiveRecord::Relation#in_batches from ActiveRecord 5.
# https://github.com/rails/rails/blob/ac027338e4a165273607dccee49a3d38bc836794/activerecord/lib/active_record/relation/batches.rb#L184
# TODO: this can be removed once we're using AR5.
raise
"Vendored ActiveRecord 5 code! Delete
#{
__FILE__
}
!"
if
ActiveRecord
::
VERSION
::
MAJOR
>=
5
module
ActiveRecord
module
Batches
# Differences from upstream: enumerator support was removed, and custom
# order/limit clauses are ignored without a warning.
def
in_batches
(
of:
1000
,
start:
nil
,
finish:
nil
,
load:
false
)
raise
"Must provide a block"
unless
block_given?
relation
=
self
.
reorder
(
batch_order
).
limit
(
of
)
relation
=
relation
.
where
(
arel_table
[
primary_key
].
gteq
(
start
))
if
start
relation
=
relation
.
where
(
arel_table
[
primary_key
].
lteq
(
finish
))
if
finish
batch_relation
=
relation
loop
do
if
load
records
=
batch_relation
.
records
ids
=
records
.
map
(
&
:id
)
yielded_relation
=
self
.
where
(
primary_key
=>
ids
)
yielded_relation
.
load_records
(
records
)
else
ids
=
batch_relation
.
pluck
(
primary_key
)
yielded_relation
=
self
.
where
(
primary_key
=>
ids
)
# Remove this file when upgraded to rails 5.0.
unless
Gitlab
.
rails5?
module
ActiveRecord
module
Batches
# Differences from upstream: enumerator support was removed, and custom
# order/limit clauses are ignored without a warning.
def
in_batches
(
of:
1000
,
start:
nil
,
finish:
nil
,
load:
false
)
raise
"Must provide a block"
unless
block_given?
relation
=
self
.
reorder
(
batch_order
).
limit
(
of
)
relation
=
relation
.
where
(
arel_table
[
primary_key
].
gteq
(
start
))
if
start
relation
=
relation
.
where
(
arel_table
[
primary_key
].
lteq
(
finish
))
if
finish
batch_relation
=
relation
loop
do
if
load
records
=
batch_relation
.
records
ids
=
records
.
map
(
&
:id
)
yielded_relation
=
self
.
where
(
primary_key
=>
ids
)
yielded_relation
.
load_records
(
records
)
else
ids
=
batch_relation
.
pluck
(
primary_key
)
yielded_relation
=
self
.
where
(
primary_key
=>
ids
)
end
break
if
ids
.
empty?
primary_key_offset
=
ids
.
last
raise
ArgumentError
.
new
(
"Primary key not included in the custom select clause"
)
unless
primary_key_offset
yield
yielded_relation
break
if
ids
.
length
<
of
batch_relation
=
relation
.
where
(
arel_table
[
primary_key
].
gt
(
primary_key_offset
))
end
break
if
ids
.
empty?
primary_key_offset
=
ids
.
last
raise
ArgumentError
.
new
(
"Primary key not included in the custom select clause"
)
unless
primary_key_offset
yield
yielded_relation
break
if
ids
.
length
<
of
batch_relation
=
relation
.
where
(
arel_table
[
primary_key
].
gt
(
primary_key_offset
))
end
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment