app/models/good_job/lockable.rb in good_job-3.5.1 vs app/models/good_job/lockable.rb in good_job-3.6.0
- old
+ new
@@ -35,15 +35,16 @@
# @!scope class
# @param column [String, Symbol] column values to Advisory Lock against
# @param function [String, Symbol] Postgres Advisory Lock function name to use
# @return [ActiveRecord::Relation]
# A relation selecting only the records that were locked.
- scope :advisory_lock, (lambda do |column: _advisory_lockable_column, function: advisory_lockable_function|
+ scope :advisory_lock, (lambda do |column: _advisory_lockable_column, function: advisory_lockable_function, select_limit: nil|
original_query = self
cte_table = Arel::Table.new(:rows)
cte_query = original_query.select(primary_key, column).except(:limit)
+ cte_query = cte_query.limit(select_limit) if select_limit
cte_type = if supports_cte_materialization_specifiers?
'MATERIALIZED'
else
''
end
@@ -152,13 +153,13 @@
#
# @example Work on the first two +MyLockableRecord+ objects that could be locked:
# MyLockableRecord.order(created_at: :asc).limit(2).with_advisory_lock do |record|
# do_something_with record
# end
- def with_advisory_lock(column: _advisory_lockable_column, function: advisory_lockable_function, unlock_session: false)
+ def with_advisory_lock(column: _advisory_lockable_column, function: advisory_lockable_function, unlock_session: false, select_limit: nil)
raise ArgumentError, "Must provide a block" unless block_given?
- records = advisory_lock(column: column, function: function).to_a
+ records = advisory_lock(column: column, function: function, select_limit: select_limit).to_a
begin
unscoped { yield(records) }
ensure
if unlock_session