module Moneta::Adapters::Sequel::SQLite
@api private
Public Class Methods
extended(mod)
click to toggle source
# File lib/moneta/adapters/sequel/sqlite.rb, line 6 def self.extended(mod) version = mod.backend.get(::Sequel[:sqlite_version].function) # See https://sqlite.org/lang_UPSERT.html mod.instance_variable_set(:@can_upsert, ::Gem::Version.new(version) >= ::Gem::Version.new('3.24.0')) end
Public Instance Methods
increment(key, amount = 1, options = {})
click to toggle source
Calls superclass method
# File lib/moneta/adapters/sequel/sqlite.rb, line 17 def increment(key, amount = 1, options = {}) return super unless @can_upsert @backend.transaction do @increment.call(key: key, value: blob(amount.to_s), amount: amount) Integer(load(key)) end end
merge!(pairs, options = {}, &block)
click to toggle source
# File lib/moneta/adapters/sequel/sqlite.rb, line 25 def merge!(pairs, options = {}, &block) @backend.transaction do pairs = yield_merge_pairs(pairs, &block) if block_given? @table.insert_conflict(:replace).import([config.key_column, config.value_column], blob_pairs(pairs).to_a) end self end
store(key, value, options = {})
click to toggle source
# File lib/moneta/adapters/sequel/sqlite.rb, line 12 def store(key, value, options = {}) @table.insert_conflict(:replace).insert(config.key_column => key, config.value_column => blob(value)) value end
Protected Instance Methods
prepare_increment()
click to toggle source
Calls superclass method
# File lib/moneta/adapters/sequel/sqlite.rb, line 42 def prepare_increment return super unless @can_upsert update_expr = (::Sequel[config.value_column].cast(Integer) + :$amount).cast(:blob) @increment = @table .insert_conflict( target: config.key_column, update: { config.value_column => update_expr }, update_where: ::Sequel.|({ config.value_column => blob("0") }, { ::Sequel.~(::Sequel[config.value_column].cast(Integer)) => 0 }) ) .prepare(:insert, statement_id(:increment), config.key_column => :$key, config.value_column => :$value) end
prepare_store()
click to toggle source
# File lib/moneta/adapters/sequel/sqlite.rb, line 36 def prepare_store @store = @table .insert_conflict(:replace) .prepare(:insert, statement_id(:store), config.key_column => :$key, config.value_column => :$value) end