moneta 1.4.2 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +35 -38
  3. data/CHANGES +9 -0
  4. data/CONTRIBUTORS +2 -0
  5. data/Gemfile +143 -55
  6. data/README.md +5 -4
  7. data/lib/moneta/adapter.rb +52 -0
  8. data/lib/moneta/adapters/activerecord.rb +77 -68
  9. data/lib/moneta/adapters/activesupportcache.rb +22 -31
  10. data/lib/moneta/adapters/cassandra.rb +114 -116
  11. data/lib/moneta/adapters/client.rb +17 -18
  12. data/lib/moneta/adapters/couch.rb +31 -26
  13. data/lib/moneta/adapters/datamapper.rb +9 -5
  14. data/lib/moneta/adapters/daybreak.rb +15 -21
  15. data/lib/moneta/adapters/dbm.rb +6 -12
  16. data/lib/moneta/adapters/file.rb +21 -13
  17. data/lib/moneta/adapters/fog.rb +5 -6
  18. data/lib/moneta/adapters/gdbm.rb +6 -12
  19. data/lib/moneta/adapters/hbase.rb +10 -12
  20. data/lib/moneta/adapters/kyotocabinet.rb +22 -27
  21. data/lib/moneta/adapters/leveldb.rb +14 -20
  22. data/lib/moneta/adapters/lmdb.rb +19 -22
  23. data/lib/moneta/adapters/localmemcache.rb +7 -13
  24. data/lib/moneta/adapters/lruhash.rb +20 -20
  25. data/lib/moneta/adapters/memcached/dalli.rb +25 -33
  26. data/lib/moneta/adapters/memcached/native.rb +14 -20
  27. data/lib/moneta/adapters/memory.rb +5 -7
  28. data/lib/moneta/adapters/mongo.rb +53 -52
  29. data/lib/moneta/adapters/pstore.rb +21 -27
  30. data/lib/moneta/adapters/redis.rb +42 -37
  31. data/lib/moneta/adapters/restclient.rb +17 -25
  32. data/lib/moneta/adapters/riak.rb +8 -9
  33. data/lib/moneta/adapters/sdbm.rb +6 -12
  34. data/lib/moneta/adapters/sequel/mysql.rb +8 -8
  35. data/lib/moneta/adapters/sequel/postgres.rb +17 -17
  36. data/lib/moneta/adapters/sequel/postgres_hstore.rb +47 -47
  37. data/lib/moneta/adapters/sequel/sqlite.rb +9 -9
  38. data/lib/moneta/adapters/sequel.rb +56 -65
  39. data/lib/moneta/adapters/sqlite.rb +37 -35
  40. data/lib/moneta/adapters/tdb.rb +8 -14
  41. data/lib/moneta/adapters/tokyocabinet.rb +19 -17
  42. data/lib/moneta/adapters/tokyotyrant.rb +29 -30
  43. data/lib/moneta/adapters/yaml.rb +1 -5
  44. data/lib/moneta/config.rb +101 -0
  45. data/lib/moneta/expires.rb +0 -1
  46. data/lib/moneta/expires_support.rb +3 -4
  47. data/lib/moneta/pool.rb +1 -1
  48. data/lib/moneta/proxy.rb +29 -0
  49. data/lib/moneta/server.rb +21 -14
  50. data/lib/moneta/version.rb +1 -1
  51. data/lib/moneta/wrapper.rb +5 -0
  52. data/lib/moneta.rb +2 -0
  53. data/moneta.gemspec +1 -0
  54. data/spec/moneta/adapters/client/client_helper.rb +4 -3
  55. data/spec/moneta/adapters/faraday_helper.rb +3 -2
  56. data/spec/moneta/adapters/lruhash/adapter_lruhash_spec.rb +10 -6
  57. data/spec/moneta/adapters/mongo/adapter_mongo_spec.rb +2 -2
  58. data/spec/moneta/config_spec.rb +219 -0
  59. data/spec/moneta/proxies/transformer/transformer_bson_spec.rb +3 -1
  60. data/spec/moneta/proxies/transformer/transformer_marshal_escape_spec.rb +2 -0
  61. data/spec/rack/session_moneta_spec.rb +44 -25
  62. data/spec/restserver.rb +3 -14
  63. metadata +24 -6
@@ -4,55 +4,47 @@ module Moneta
4
4
  module Adapters
5
5
  # Moneta rest client backend which works together with {Rack::MonetaRest}
6
6
  # @api public
7
- class RestClient
8
- include Defaults
9
-
10
- attr_reader :backend
11
-
12
- # @param [Hash] options
13
- # @option options [String] :url URL
14
- # @option options [Symbol] :adapter The adapter to tell Faraday to use
15
- # @option options [Faraday::Connection] :backend Use existing backend instance
16
- # @option options Other options passed to {Faraday::new} (unless
17
- # :backend option is provided).
18
- def initialize(options = {})
19
- @backend = options.delete(:backend) ||
20
- begin
21
- raise ArgumentError, 'Option :url is required' unless url = options.delete(:url)
22
- block = if faraday_adapter = options.delete(:adapter)
23
- proc { |faraday| faraday.adapter faraday_adapter }
24
- end
25
- ::Faraday.new(url, options, &block)
26
- end
7
+ class RestClient < Adapter
8
+ # @!method initialize(options = {})
9
+ # @param [Hash] options
10
+ # @option options [String] :url URL
11
+ # @option options [Symbol] :adapter The adapter to tell Faraday to use
12
+ # @option options [Faraday::Connection] :backend Use existing backend instance
13
+ # @option options Other options passed to {Faraday::new} (unless
14
+ # :backend option is provided).
15
+ backend do |url:, adapter: nil, **options|
16
+ ::Faraday.new(url, options) do |faraday|
17
+ faraday.adapter adapter if adapter
18
+ end
27
19
  end
28
20
 
29
21
  # (see Proxy#key?)
30
22
  def key?(key, options = {})
31
- @backend.head(key).status == 200
23
+ backend.head(key).status == 200
32
24
  end
33
25
 
34
26
  # (see Proxy#load)
35
27
  def load(key, options = {})
36
- response = @backend.get(key)
28
+ response = backend.get(key)
37
29
  response.status == 200 ? response.body : nil
38
30
  end
39
31
 
40
32
  # (see Proxy#store)
41
33
  def store(key, value, options = {})
42
- response = @backend.post(key, value)
34
+ response = backend.post(key, value)
43
35
  raise "HTTP error #{response.status}" unless response.status == 200
44
36
  value
45
37
  end
46
38
 
47
39
  # (see Proxy#delete)
48
40
  def delete(key, options = {})
49
- response = @backend.delete(key)
41
+ response = backend.delete(key)
50
42
  response.status == 200 ? response.body : nil
51
43
  end
52
44
 
53
45
  # (see Proxy#clear)
54
46
  def clear(options = {})
55
- @backend.delete ''
47
+ backend.delete ''
56
48
  self
57
49
  end
58
50
  end
@@ -5,21 +5,20 @@ module Moneta
5
5
  # Riak backend
6
6
  # @api public
7
7
  # @author Potapov Sergey (aka Blake)
8
- class Riak
9
- include Defaults
8
+ class Riak < Adapter
9
+ config :bucket, default: 'moneta'
10
+ config :content_type, default: 'application/octet-stream'
10
11
 
11
- attr_reader :backend
12
+ backend { |**options| ::Riak::Client.new(options) }
12
13
 
13
14
  # @param [Hash] options
14
15
  # @option options [String] :bucket ('moneta') Bucket name
15
16
  # @option options [String] :content_type ('application/octet-stream') Default content type
16
- # @option options All other options passed to `Riak::Client#new`
17
17
  # @option options [::Riak::Client] :backend Use existing backend instance
18
+ # @option options All other options passed to `Riak::Client#new`
18
19
  def initialize(options = {})
19
- bucket = options.delete(:bucket) || 'moneta'
20
- @content_type = options.delete(:content_type) || 'application/octet-stream'
21
- @backend = options[:backend] || ::Riak::Client.new(options)
22
- @bucket = @backend.bucket(bucket)
20
+ super
21
+ @bucket = backend.bucket(config.bucket)
23
22
  end
24
23
 
25
24
  # (see Proxy#key?)
@@ -44,7 +43,7 @@ module Moneta
44
43
  # (see Proxy#store)
45
44
  def store(key, value, options = {})
46
45
  obj = ::Riak::RObject.new(@bucket, key)
47
- obj.content_type = options[:content_type] || @content_type
46
+ obj.content_type = options[:content_type] || config.content_type
48
47
  obj.raw_data = value
49
48
  obj.store(options.dup)
50
49
  value
@@ -4,23 +4,17 @@ module Moneta
4
4
  module Adapters
5
5
  # SDBM backend
6
6
  # @api public
7
- class SDBM
8
- include Defaults
7
+ class SDBM < Adapter
9
8
  include DBMAdapter
10
9
  include IncrementSupport
11
10
  include CreateSupport
12
11
  include EachKeySupport
13
12
 
14
- # @param [Hash] options
15
- # @option options [String] :file Database file
16
- # @option options [::SDBM] :backend Use existing backend instance
17
- def initialize(options = {})
18
- @backend = options[:backend] ||
19
- begin
20
- raise ArgumentError, 'Option :file is required' unless options[:file]
21
- ::SDBM.new(options[:file])
22
- end
23
- end
13
+ # @!method initialize(options = {})
14
+ # @param [Hash] options
15
+ # @option options [String] :file Database file
16
+ # @option options [::SDBM] :backend Use existing backend instance
17
+ backend { |file:| ::SDBM.new(file) }
24
18
  end
25
19
  end
26
20
  end
@@ -14,7 +14,7 @@ module Moneta
14
14
  # "gap lock").
15
15
  if row = @load_for_update.call(key: key)
16
16
  # Integer() will raise an exception if the existing value cannot be parsed
17
- amount += Integer(row[value_column])
17
+ amount += Integer(row[config.value_column])
18
18
  @increment_update.call(key: key, value: amount)
19
19
  else
20
20
  @create.call(key: key, value: amount)
@@ -31,17 +31,17 @@ module Moneta
31
31
  pairs = yield_merge_pairs(pairs, &block) if block_given?
32
32
  @table
33
33
  .on_duplicate_key_update
34
- .import([key_column, value_column], blob_pairs(pairs).to_a)
34
+ .import([config.key_column, config.value_column], blob_pairs(pairs).to_a)
35
35
  end
36
36
 
37
37
  self
38
38
  end
39
39
 
40
40
  def each_key
41
- return super unless block_given? && @each_key_server && @table.respond_to?(:stream)
41
+ return super unless block_given? && config.each_key_server && @table.respond_to?(:stream)
42
42
  # Order is not required when streaming
43
- @table.server(@each_key_server).select(key_column).paged_each do |row|
44
- yield row[key_column]
43
+ @table.server(config.each_key_server).select(config.key_column).paged_each do |row|
44
+ yield row[config.key_column]
45
45
  end
46
46
  self
47
47
  end
@@ -51,13 +51,13 @@ module Moneta
51
51
  def prepare_store
52
52
  @store = @table
53
53
  .on_duplicate_key_update
54
- .prepare(:insert, statement_id(:store), key_column => :$key, value_column => :$value)
54
+ .prepare(:insert, statement_id(:store), config.key_column => :$key, config.value_column => :$value)
55
55
  end
56
56
 
57
57
  def prepare_increment
58
58
  @increment_update = @table
59
- .where(key_column => :$key)
60
- .prepare(:update, statement_id(:increment_update), value_column => :$value)
59
+ .where(config.key_column => :$key)
60
+ .prepare(:update, statement_id(:increment_update), config.value_column => :$value)
61
61
  super
62
62
  end
63
63
  end
@@ -12,14 +12,14 @@ module Moneta
12
12
  def increment(key, amount = 1, options = {})
13
13
  result = @increment.call(key: key, value: blob(amount.to_s), amount: amount)
14
14
  if row = result.first
15
- row[value_column].to_i
15
+ row[config.value_column].to_i
16
16
  end
17
17
  end
18
18
 
19
19
  def delete(key, options = {})
20
20
  result = @delete.call(key: key)
21
21
  if row = result.first
22
- row[value_column]
22
+ row[config.value_column]
23
23
  end
24
24
  end
25
25
 
@@ -27,19 +27,19 @@ module Moneta
27
27
  @backend.transaction do
28
28
  pairs = yield_merge_pairs(pairs, &block) if block_given?
29
29
  @table
30
- .insert_conflict(target: key_column,
31
- update: { value_column => ::Sequel[:excluded][value_column] })
32
- .import([key_column, value_column], blob_pairs(pairs).to_a)
30
+ .insert_conflict(target: config.key_column,
31
+ update: { config.value_column => ::Sequel[:excluded][config.value_column] })
32
+ .import([config.key_column, config.value_column], blob_pairs(pairs).to_a)
33
33
  end
34
34
 
35
35
  self
36
36
  end
37
37
 
38
38
  def each_key
39
- return super unless block_given? && !@each_key_server && @table.respond_to?(:use_cursor)
39
+ return super unless block_given? && !config.each_key_server && @table.respond_to?(:use_cursor)
40
40
  # With a cursor, this will Just Work.
41
- @table.select(key_column).paged_each do |row|
42
- yield row[key_column]
41
+ @table.select(config.key_column).paged_each do |row|
42
+ yield row[config.key_column]
43
43
  end
44
44
  self
45
45
  end
@@ -48,30 +48,30 @@ module Moneta
48
48
 
49
49
  def prepare_store
50
50
  @store = @table
51
- .insert_conflict(target: key_column,
52
- update: { value_column => ::Sequel[:excluded][value_column] })
53
- .prepare(:insert, statement_id(:store), key_column => :$key, value_column => :$value)
51
+ .insert_conflict(target: config.key_column,
52
+ update: { config.value_column => ::Sequel[:excluded][config.value_column] })
53
+ .prepare(:insert, statement_id(:store), config.key_column => :$key, config.value_column => :$value)
54
54
  end
55
55
 
56
56
  def prepare_increment
57
57
  update_expr = ::Sequel[:convert_to].function(
58
58
  (::Sequel[:convert_from].function(
59
- ::Sequel[@table_name][value_column],
59
+ ::Sequel[config.table][config.value_column],
60
60
  'UTF8'
61
61
  ).cast(Integer) + :$amount).cast(String),
62
62
  'UTF8'
63
63
  )
64
64
 
65
65
  @increment = @table
66
- .returning(value_column)
67
- .insert_conflict(target: key_column, update: { value_column => update_expr })
68
- .prepare(:insert, statement_id(:increment), key_column => :$key, value_column => :$value)
66
+ .returning(config.value_column)
67
+ .insert_conflict(target: config.key_column, update: { config.value_column => update_expr })
68
+ .prepare(:insert, statement_id(:increment), config.key_column => :$key, config.value_column => :$value)
69
69
  end
70
70
 
71
71
  def prepare_delete
72
72
  @delete = @table
73
- .returning(value_column)
74
- .where(key_column => :$key)
73
+ .returning(config.value_column)
74
+ .where(config.key_column => :$key)
75
75
  .prepare(:delete, statement_id(:delete))
76
76
  end
77
77
  end
@@ -12,7 +12,7 @@ module Moneta
12
12
 
13
13
  def key?(key, options = {})
14
14
  if @key
15
- row = @key.call(row: @row, key: key) || false
15
+ row = @key.call(row: config.hstore, key: key) || false
16
16
  row && row[:present]
17
17
  else
18
18
  @key_pl.get(key)
@@ -22,13 +22,13 @@ module Moneta
22
22
  def store(key, value, options = {})
23
23
  @backend.transaction do
24
24
  create_row
25
- @store.call(row: @row, pair: ::Sequel.hstore(key => value))
25
+ @store.call(row: config.hstore, pair: ::Sequel.hstore(key => value))
26
26
  end
27
27
  value
28
28
  end
29
29
 
30
30
  def load(key, options = {})
31
- if row = @load.call(row: @row, key: key)
31
+ if row = @load.call(row: config.hstore, key: key)
32
32
  row[:value]
33
33
  end
34
34
  end
@@ -36,7 +36,7 @@ module Moneta
36
36
  def delete(key, options = {})
37
37
  @backend.transaction do
38
38
  value = load(key, options)
39
- @delete.call(row: @row, key: key)
39
+ @delete.call(row: config.hstore, key: key)
40
40
  value
41
41
  end
42
42
  end
@@ -44,7 +44,7 @@ module Moneta
44
44
  def increment(key, amount = 1, options = {})
45
45
  @backend.transaction do
46
46
  create_row
47
- if row = @increment.call(row: @row, key: key, amount: amount).first
47
+ if row = @increment.call(row: config.hstore, key: key, amount: amount).first
48
48
  row[:value].to_i
49
49
  end
50
50
  end
@@ -55,23 +55,23 @@ module Moneta
55
55
  create_row
56
56
  1 ==
57
57
  if @create
58
- @create.call(row: @row, key: key, pair: ::Sequel.hstore(key => value))
58
+ @create.call(row: config.hstore, key: key, pair: ::Sequel.hstore(key => value))
59
59
  else
60
60
  @table
61
- .where(key_column => @row)
62
- .exclude(::Sequel[value_column].hstore.key?(key))
63
- .update(value_column => ::Sequel[value_column].hstore.merge(key => value))
61
+ .where(config.key_column => config.hstore)
62
+ .exclude(::Sequel[config.value_column].hstore.key?(key))
63
+ .update(config.value_column => ::Sequel[config.value_column].hstore.merge(key => value))
64
64
  end
65
65
  end
66
66
  end
67
67
 
68
68
  def clear(options = {})
69
- @clear.call(row: @row)
69
+ @clear.call(row: config.hstore)
70
70
  self
71
71
  end
72
72
 
73
73
  def values_at(*keys, **options)
74
- if row = @values_at.call(row: @row, keys: ::Sequel.pg_array(keys))
74
+ if row = @values_at.call(row: config.hstore, keys: ::Sequel.pg_array(keys))
75
75
  row[:values].to_a
76
76
  else
77
77
  []
@@ -79,7 +79,7 @@ module Moneta
79
79
  end
80
80
 
81
81
  def slice(*keys, **options)
82
- if row = @slice.call(row: @row, keys: ::Sequel.pg_array(keys))
82
+ if row = @slice.call(row: config.hstore, keys: ::Sequel.pg_array(keys))
83
83
  row[:pairs].to_h
84
84
  else
85
85
  []
@@ -91,24 +91,24 @@ module Moneta
91
91
  create_row
92
92
  pairs = yield_merge_pairs(pairs, &block) if block_given?
93
93
  hash = Hash === pairs ? pairs : Hash[pairs.to_a]
94
- @store.call(row: @row, pair: ::Sequel.hstore(hash))
94
+ @store.call(row: config.hstore, pair: ::Sequel.hstore(hash))
95
95
  end
96
96
 
97
97
  self
98
98
  end
99
99
 
100
100
  def each_key
101
- return enum_for(:each_key) { @size.call(row: @row)[:size] } unless block_given?
101
+ return enum_for(:each_key) { @size.call(row: config.hstore)[:size] } unless block_given?
102
102
 
103
103
  ds =
104
- if @each_key_server
105
- @table.server(@each_key_server)
104
+ if config.each_key_server
105
+ @table.server(config.each_key_server)
106
106
  else
107
107
  @table
108
108
  end
109
109
  ds = ds.order(:skeys) unless @table.respond_to?(:use_cursor)
110
- ds.where(key_column => @row)
111
- .select(::Sequel[value_column].hstore.skeys)
110
+ ds.where(config.key_column => config.hstore)
111
+ .select(::Sequel[config.value_column].hstore.skeys)
112
112
  .paged_each do |row|
113
113
  yield row[:skeys]
114
114
  end
@@ -118,14 +118,14 @@ module Moneta
118
118
  protected
119
119
 
120
120
  def create_row
121
- @create_row.call(row: @row)
121
+ @create_row.call(row: config.hstore)
122
122
  end
123
123
 
124
124
  def create_table
125
- key_column = self.key_column
126
- value_column = self.value_column
125
+ key_column = config.key_column
126
+ value_column = config.value_column
127
127
 
128
- @backend.create_table?(@table_name) do
128
+ @backend.create_table?(config.table) do
129
129
  column key_column, String, null: false, primary_key: true
130
130
  column value_column, :hstore
131
131
  index value_column, type: :gin
@@ -134,7 +134,7 @@ module Moneta
134
134
 
135
135
  def slice_for_update(pairs)
136
136
  keys = pairs.map { |k, _| k }.to_a
137
- if row = @slice_for_update.call(row: @row, keys: ::Sequel.pg_array(keys))
137
+ if row = @slice_for_update.call(row: config.hstore, keys: ::Sequel.pg_array(keys))
138
138
  row[:pairs].to_h
139
139
  else
140
140
  {}
@@ -152,53 +152,53 @@ module Moneta
152
152
  def prepare_create_row
153
153
  @create_row = @table
154
154
  .insert_ignore
155
- .prepare(:insert, statement_id(:hstore_create_row), key_column => :$row, value_column => '')
155
+ .prepare(:insert, statement_id(:hstore_create_row), config.key_column => :$row, config.value_column => '')
156
156
  end
157
157
 
158
158
  def prepare_clear
159
- @clear = @table.where(key_column => :$row).prepare(:update, statement_id(:hstore_clear), value_column => '')
159
+ @clear = @table.where(config.key_column => :$row).prepare(:update, statement_id(:hstore_clear), config.value_column => '')
160
160
  end
161
161
 
162
162
  def prepare_key
163
163
  if defined?(JRUBY_VERSION)
164
164
  @key_pl = ::Sequel::Dataset::PlaceholderLiteralizer.loader(@table) do |pl, ds|
165
- ds.where(key_column => @row).select(::Sequel[value_column].hstore.key?(pl.arg))
165
+ ds.where(config.key_column => config.hstore).select(::Sequel[config.value_column].hstore.key?(pl.arg))
166
166
  end
167
167
  else
168
- @key = @table.where(key_column => :$row)
169
- .select(::Sequel[value_column].hstore.key?(:$key).as(:present))
168
+ @key = @table.where(config.key_column => :$row)
169
+ .select(::Sequel[config.value_column].hstore.key?(:$key).as(:present))
170
170
  .prepare(:first, statement_id(:hstore_key))
171
171
  end
172
172
  end
173
173
 
174
174
  def prepare_store
175
175
  @store = @table
176
- .where(key_column => :$row)
177
- .prepare(:update, statement_id(:hstore_store), value_column => ::Sequel[value_column].hstore.merge(:$pair))
176
+ .where(config.key_column => :$row)
177
+ .prepare(:update, statement_id(:hstore_store), config.value_column => ::Sequel[config.value_column].hstore.merge(:$pair))
178
178
  end
179
179
 
180
180
  def prepare_increment
181
181
  pair = ::Sequel[:hstore]
182
182
  .function(:$key, (
183
- ::Sequel[:coalesce].function(::Sequel[value_column].hstore[:$key].cast(Integer), 0) +
183
+ ::Sequel[:coalesce].function(::Sequel[config.value_column].hstore[:$key].cast(Integer), 0) +
184
184
  :$amount
185
185
  ).cast(String))
186
186
 
187
187
  @increment = @table
188
- .returning(::Sequel[value_column].hstore[:$key].as(:value))
189
- .where(key_column => :$row)
190
- .prepare(:update, statement_id(:hstore_increment), value_column => ::Sequel.join([value_column, pair]))
188
+ .returning(::Sequel[config.value_column].hstore[:$key].as(:value))
189
+ .where(config.key_column => :$row)
190
+ .prepare(:update, statement_id(:hstore_increment), config.value_column => ::Sequel.join([config.value_column, pair]))
191
191
  end
192
192
 
193
193
  def prepare_load
194
- @load = @table.where(key_column => :$row)
195
- .select(::Sequel[value_column].hstore[:$key].as(:value))
194
+ @load = @table.where(config.key_column => :$row)
195
+ .select(::Sequel[config.value_column].hstore[:$key].as(:value))
196
196
  .prepare(:first, statement_id(:hstore_load))
197
197
  end
198
198
 
199
199
  def prepare_delete
200
- @delete = @table.where(key_column => :$row)
201
- .prepare(:update, statement_id(:hstore_delete), value_column => ::Sequel[value_column].hstore.delete(:$key))
200
+ @delete = @table.where(config.key_column => :$row)
201
+ .prepare(:update, statement_id(:hstore_delete), config.value_column => ::Sequel[config.value_column].hstore.delete(:$key))
202
202
  end
203
203
 
204
204
  def prepare_create
@@ -207,30 +207,30 @@ module Moneta
207
207
  # https://stackoverflow.com/questions/11940401/escaping-hstore-contains-operators-in-a-jdbc-prepared-statement
208
208
  return if defined?(JRUBY_VERSION)
209
209
  @create = @table
210
- .where(key_column => :$row)
211
- .exclude(::Sequel[value_column].hstore.key?(:$key))
212
- .prepare(:update, statement_id(:hstore_create), value_column => ::Sequel[value_column].hstore.merge(:$pair))
210
+ .where(config.key_column => :$row)
211
+ .exclude(::Sequel[config.value_column].hstore.key?(:$key))
212
+ .prepare(:update, statement_id(:hstore_create), config.value_column => ::Sequel[config.value_column].hstore.merge(:$pair))
213
213
  end
214
214
 
215
215
  def prepare_values_at
216
216
  @values_at = @table
217
- .where(key_column => :$row)
218
- .select(::Sequel[value_column].hstore[::Sequel.cast(:$keys, :"text[]")].as(:values))
217
+ .where(config.key_column => :$row)
218
+ .select(::Sequel[config.value_column].hstore[::Sequel.cast(:$keys, :"text[]")].as(:values))
219
219
  .prepare(:first, statement_id(:hstore_values_at))
220
220
  end
221
221
 
222
222
  def prepare_slice
223
223
  slice = @table
224
- .where(key_column => :$row)
225
- .select(::Sequel[value_column].hstore.slice(:$keys).as(:pairs))
224
+ .where(config.key_column => :$row)
225
+ .select(::Sequel[config.value_column].hstore.slice(:$keys).as(:pairs))
226
226
  @slice = slice.prepare(:first, statement_id(:hstore_slice))
227
227
  @slice_for_update = slice.for_update.prepare(:first, statement_id(:hstore_slice_for_update))
228
228
  end
229
229
 
230
230
  def prepare_size
231
231
  @size = @backend
232
- .from(@table.where(key_column => :$row)
233
- .select(::Sequel[value_column].hstore.each))
232
+ .from(@table.where(config.key_column => :$row)
233
+ .select(::Sequel[config.value_column].hstore.each))
234
234
  .select { count.function.*.as(:size) }
235
235
  .prepare(:first, statement_id(:hstore_size))
236
236
  end
@@ -10,7 +10,7 @@ module Moneta
10
10
  end
11
11
 
12
12
  def store(key, value, options = {})
13
- @table.insert_conflict(:replace).insert(key_column => key, value_column => blob(value))
13
+ @table.insert_conflict(:replace).insert(config.key_column => key, config.value_column => blob(value))
14
14
  value
15
15
  end
16
16
 
@@ -25,7 +25,7 @@ module Moneta
25
25
  def merge!(pairs, options = {}, &block)
26
26
  @backend.transaction do
27
27
  pairs = yield_merge_pairs(pairs, &block) if block_given?
28
- @table.insert_conflict(:replace).import([key_column, value_column], blob_pairs(pairs).to_a)
28
+ @table.insert_conflict(:replace).import([config.key_column, config.value_column], blob_pairs(pairs).to_a)
29
29
  end
30
30
 
31
31
  self
@@ -36,20 +36,20 @@ module Moneta
36
36
  def prepare_store
37
37
  @store = @table
38
38
  .insert_conflict(:replace)
39
- .prepare(:insert, statement_id(:store), key_column => :$key, value_column => :$value)
39
+ .prepare(:insert, statement_id(:store), config.key_column => :$key, config.value_column => :$value)
40
40
  end
41
41
 
42
42
  def prepare_increment
43
43
  return super unless @can_upsert
44
- update_expr = (::Sequel[value_column].cast(Integer) + :$amount).cast(:blob)
44
+ update_expr = (::Sequel[config.value_column].cast(Integer) + :$amount).cast(:blob)
45
45
  @increment = @table
46
46
  .insert_conflict(
47
- target: key_column,
48
- update: { value_column => update_expr },
49
- update_where: ::Sequel.|({ value_column => blob("0") },
50
- { ::Sequel.~(::Sequel[value_column].cast(Integer)) => 0 })
47
+ target: config.key_column,
48
+ update: { config.value_column => update_expr },
49
+ update_where: ::Sequel.|({ config.value_column => blob("0") },
50
+ { ::Sequel.~(::Sequel[config.value_column].cast(Integer)) => 0 })
51
51
  )
52
- .prepare(:insert, statement_id(:increment), key_column => :$key, value_column => :$value)
52
+ .prepare(:insert, statement_id(:increment), config.key_column => :$key, config.value_column => :$value)
53
53
  end
54
54
  end
55
55
  end