module Sequel::Postgres::PgAdvisoryLocking

Public Instance Methods

try_advisory_lock(id, opts = {}, &block) click to toggle source
# File lib/sequel/extensions/pg_advisory_locking.rb, line 14
def try_advisory_lock(id, opts = {}, &block)
  exclusive = opts.fetch(:exclusive, true)
  lockfn = exclusive ? :pg_try_advisory_lock : :pg_try_advisory_lock_shared
  unlockfn = exclusive ? :pg_advisory_unlock : :pg_advisory_unlock_shared
  yield_with_advisory_lock(id, lockfn, unlockfn, &block)
end
with_advisory_lock(id, opts = {}, &block) click to toggle source
# File lib/sequel/extensions/pg_advisory_locking.rb, line 7
def with_advisory_lock(id, opts = {}, &block)
  exclusive = opts.fetch(:exclusive, true)
  lockfn = exclusive ? :pg_advisory_lock : :pg_advisory_lock_shared
  unlockfn = exclusive ? :pg_advisory_unlock : :pg_advisory_unlock_shared
  yield_with_advisory_lock(id, lockfn, unlockfn, &block)
end

Private Instance Methods

yield_with_advisory_lock(id, lockfn, unlockfn) { || ... } click to toggle source
# File lib/sequel/extensions/pg_advisory_locking.rb, line 23
def yield_with_advisory_lock(id, lockfn, unlockfn, &block)
  if get(Sequel.function(lockfn, id))
    begin
      yield
    ensure
      get(Sequel.function(unlockfn, id))
    end
  end
end