module Sequel::Plugins::MssqlOptimisticLocking
This plugin implements optimistic locking mechanism on Microsoft SQL Server using a timestamp/rowversion column to ensure that concurrent updates are detected and previous changes are not automatically overridden. This is best implemented by a code example:
class Person < Sequel::Model plugin :mssql_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 column of timestamp or rowversion. The plugin uses a default name of timestamp for this columns, but you can override that using the :lock_column option:
plugin :mssql_optimistic_locking, lock_column: :column_name
By default, the plugin allows using the lock column setter method to either increase or decrease the lock column value. To prevent increases, which could potentially be used to skip an update when it update should be made, you can use the :prevent_increase plugin option:
plugin :mssql_optimistic_locking, prevent_increase: true
This plugin relies on the instance_filters plugin.
Public Class Methods
Source
# File lib/sequel/plugins/mssql_optimistic_locking.rb 35 def self.apply(model, opts=OPTS) 36 model.plugin(:optimistic_locking_base) 37 end
Load the instance_filters plugin into the model.
Source
# File lib/sequel/plugins/mssql_optimistic_locking.rb 40 def self.configure(model, opts=OPTS) 41 model.lock_column = opts[:lock_column] || model.lock_column || :timestamp 42 # SEQUEL6: Make prevent_increase true by default 43 model.send(:prevent_lock_column_increase!) if opts[:prevent_increase] 44 end
Set the lock column