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::NoExistingObject
In order for this plugin to work, you need to make sure that the database table has a lock_version
column that defaults to 0. To change the column used, provide a :lock_column
option when loading the plugin:
plugin :optimistic_locking, lock_column: :version
This plugin relies on the instance_filters plugin.
Classes and Modules
Constants
Error | = | Sequel::NoExistingObject |
Exception class raised when trying to update or destroy a stale object. |
Public Class methods
apply(model, opts=OPTS)
[show source]
# File lib/sequel/plugins/optimistic_locking.rb 28 def self.apply(model, opts=OPTS) 29 model.plugin(:optimistic_locking_base) 30 end
configure(model, opts=OPTS)
Set the lock column
[show source]
# File lib/sequel/plugins/optimistic_locking.rb 33 def self.configure(model, opts=OPTS) 34 model.lock_column = opts[:lock_column] || model.lock_column || :lock_version 35 end