module Sequel::Plugins::OptimisticLocking

This plugin implements a simple database-independent locking mechanism to ensure that concurrent updates do not override changes. This is best implemented by a code example:

class Person < Sequel::Model
  plugin :optimistic_locking
end
p1 = Person[1]
p2 = Person[1]
p1.update(:name=>'Jim') # works
p2.update(:name=>'Bob') # raises Sequel::Plugins::OptimisticLocking::Error

In order for this plugin to work, you need to make sure that the database table has a lock_version column (or other column you name via the lock_column class level accessor) that defaults to 0.

This plugin relies on the instance_filters plugin.

Constants

Error

Exception class raised when require_modification is set and an UPDATE or DELETE statement to modify the dataset doesn't modify a single row.

Public Class Methods

apply(model, opts=OPTS) click to toggle source

Load the instance_filters plugin into the model.

# File lib/sequel/plugins/optimistic_locking.rb, line 25
def self.apply(model, opts=OPTS)
  model.plugin :instance_filters
end
configure(model, opts=OPTS) click to toggle source

Set the lock_column to the :lock_column option, or :lock_version if that option is not given.

# File lib/sequel/plugins/optimistic_locking.rb, line 31
def self.configure(model, opts=OPTS)
  model.lock_column = opts[:lock_column] || :lock_version
end