switchman 1.9.4 → 1.9.5
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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76cc38b30914de73cddc2b347abe5e0fdfd1e35f
|
4
|
+
data.tar.gz: d12887e2755b199c584906a13f51df762ed602d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58f34befaed170ea8a74df108d28bc925edeafe994dbec25d26a93d44ec73f5b5824a8c9ba111963ee7c6d8cfa10051d434d05ff51bb1b517b87ef641f8e844b
|
7
|
+
data.tar.gz: 7ab150743f0ecc027b4935dc5e2630f2c242a53d191439789399a13433fda2d20f76f3b050f57882a3e57cb241c71659eec8ac3233423085a4b3da636214fffb
|
@@ -19,11 +19,11 @@ module Switchman
|
|
19
19
|
@values[:shard_source]
|
20
20
|
end
|
21
21
|
def shard_value=(value)
|
22
|
-
raise ImmutableRelation if @loaded
|
22
|
+
raise ::ActiveRecord::ImmutableRelation if @loaded
|
23
23
|
@values[:shard] = value
|
24
24
|
end
|
25
25
|
def shard_source_value=(value)
|
26
|
-
raise ImmutableRelation if @loaded
|
26
|
+
raise ::ActiveRecord::ImmutableRelation if @loaded
|
27
27
|
@values[:shard_source] = value
|
28
28
|
end
|
29
29
|
|
@@ -126,11 +126,18 @@ module Switchman
|
|
126
126
|
def transpose_#{type}_clauses(source_shard, target_shard, remove_nonlocal_primary_keys)
|
127
127
|
if ::Rails.version >= '5'
|
128
128
|
unless (predicates = #{type}_clause.send(:predicates)).empty?
|
129
|
-
new_predicates = transpose_predicates(predicates, source_shard,
|
130
|
-
|
131
|
-
|
129
|
+
new_predicates, new_binds = transpose_predicates(predicates, source_shard,
|
130
|
+
target_shard, remove_nonlocal_primary_keys,
|
131
|
+
binds: #{type}_clause.binds,
|
132
|
+
dup_binds_on_mutation: true)
|
133
|
+
if new_predicates != predicates || !new_binds.equal?(#{type}_clause.binds)
|
132
134
|
self.#{type}_clause = #{type}_clause.dup
|
133
|
-
|
135
|
+
if new_predicates != predicates
|
136
|
+
#{type}_clause.instance_variable_set(:@predicates, new_predicates)
|
137
|
+
end
|
138
|
+
if !new_binds.equal?(#{type}_clause.binds)
|
139
|
+
#{type}_clause.instance_variable_set(:@binds, new_binds)
|
140
|
+
end
|
134
141
|
end
|
135
142
|
end
|
136
143
|
else
|
@@ -181,7 +188,6 @@ module Switchman
|
|
181
188
|
when ::Arel::Nodes::BindParam
|
182
189
|
# look for a bind param with a matching column name
|
183
190
|
if ::Rails.version >= "5"
|
184
|
-
binds ||= where_clause.binds + having_clause.binds
|
185
191
|
if binds && bind = binds.detect{|b| b&.name.to_s == klass.primary_key.to_s}
|
186
192
|
unless bind.value.is_a?(::ActiveRecord::StatementCache::Substitute)
|
187
193
|
local_id, id_shard = Shard.local_id_for(bind.value)
|
@@ -268,8 +274,13 @@ module Switchman
|
|
268
274
|
|
269
275
|
# semi-private
|
270
276
|
public
|
271
|
-
def transpose_predicates(predicates,
|
272
|
-
|
277
|
+
def transpose_predicates(predicates,
|
278
|
+
source_shard,
|
279
|
+
target_shard,
|
280
|
+
remove_nonlocal_primary_keys = false,
|
281
|
+
binds: nil,
|
282
|
+
dup_binds_on_mutation: false)
|
283
|
+
result = predicates.map do |predicate|
|
273
284
|
next predicate unless predicate.is_a?(::Arel::Nodes::Binary)
|
274
285
|
next predicate unless predicate.left.is_a?(::Arel::Attributes::Attribute)
|
275
286
|
relation, column = relation_and_column(predicate.left)
|
@@ -312,8 +323,13 @@ module Switchman
|
|
312
323
|
when ::Arel::Nodes::BindParam
|
313
324
|
# look for a bind param with a matching column name
|
314
325
|
if ::Rails.version >= "5"
|
315
|
-
binds ||= where_clause.binds + having_clause.binds
|
316
326
|
if binds && bind = binds.detect{|b| b&.name.to_s == predicate.left.name.to_s}
|
327
|
+
# before we mutate, dup
|
328
|
+
if dup_binds_on_mutation
|
329
|
+
binds = binds.map(&:dup)
|
330
|
+
dup_binds_on_mutation = false
|
331
|
+
bind = binds.find { |b| b&.name.to_s == predicate.left.name.to_s }
|
332
|
+
end
|
317
333
|
if bind.value.is_a?(::ActiveRecord::StatementCache::Substitute)
|
318
334
|
bind.value.sharded = true # mark for transposition later
|
319
335
|
bind.value.primary = true if type == :primary
|
@@ -356,6 +372,8 @@ module Switchman
|
|
356
372
|
predicate.class.new(predicate.left, new_right_value)
|
357
373
|
end
|
358
374
|
end
|
375
|
+
result = [result, binds] if ::Rails.version >= '5'
|
376
|
+
result
|
359
377
|
end
|
360
378
|
end
|
361
379
|
end
|
@@ -21,7 +21,7 @@ module Switchman
|
|
21
21
|
where_clause = super
|
22
22
|
predicates = where_clause.send(:predicates)
|
23
23
|
@scope.send(:infer_shards_from_primary_key, predicates, where_clause.binds) if @scope.shard_source_value == :implicit && @scope.shard_value.is_a?(Shard)
|
24
|
-
predicates = @scope.transpose_predicates(predicates, nil, @scope.primary_shard, false, where_clause.binds)
|
24
|
+
predicates, _new_binds = @scope.transpose_predicates(predicates, nil, @scope.primary_shard, false, binds: where_clause.binds)
|
25
25
|
where_clause.instance_variable_set(:@predicates, predicates)
|
26
26
|
where_clause
|
27
27
|
else
|
data/lib/switchman/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: switchman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.9.
|
4
|
+
version: 1.9.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cody Cutrer
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-03-
|
13
|
+
date: 2017-03-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: railties
|