switchman 3.0.7 → 3.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/switchman/shard.rb +8 -4
- data/lib/switchman/active_record/database_configurations.rb +1 -1
- data/lib/switchman/active_record/query_methods.rb +3 -3
- data/lib/switchman/arel.rb +28 -6
- data/lib/switchman/rails.rb +1 -1
- data/lib/switchman/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0148847d4a814e96ae663f5e2576e52a5feb9709a0b4ca7edf531884404e982
|
4
|
+
data.tar.gz: df40d39aed43999ba851a99b74808704c99f536ef352194734a66b912c260564
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04e37250e9480e5c1d4683259c2cf5380e7da23bf44d890550920a0446a1dd3dfc1f371b294ccea6d25a3cd54b8605d8a1277613cba953e5b3d23325580d2fd2
|
7
|
+
data.tar.gz: c8b4d479438201645fd5fab3997258e7e7e141680d2470ed2accef6922f32b664c9349e18b72b07e9a0fcf1366b47043deaf002feeadd3517138356a213010e9
|
@@ -43,11 +43,9 @@ module Switchman
|
|
43
43
|
@default = begin
|
44
44
|
find_cached('default_shard') { Shard.where(default: true).take } || default
|
45
45
|
# If we are *super* early in boot, the connection pool won't exist; we don't want to fill in the default shard yet
|
46
|
-
rescue
|
47
|
-
nil
|
48
|
-
# rescue the fake default if the table doesn't exist
|
46
|
+
# Otherwise, rescue the fake default if the table doesn't exist
|
49
47
|
rescue
|
50
|
-
default
|
48
|
+
sharding_initialized ? default : nil
|
51
49
|
end
|
52
50
|
return default unless @default
|
53
51
|
|
@@ -469,6 +467,10 @@ module Switchman
|
|
469
467
|
|
470
468
|
private
|
471
469
|
|
470
|
+
def sharding_initialized
|
471
|
+
@sharding_initialized ||= false
|
472
|
+
end
|
473
|
+
|
472
474
|
def add_sharded_model(klass)
|
473
475
|
@sharded_models = (sharded_models + [klass]).freeze
|
474
476
|
initialize_sharding
|
@@ -496,6 +498,8 @@ module Switchman
|
|
496
498
|
|
497
499
|
klass.connects_to shards: connects_to_hash
|
498
500
|
end
|
501
|
+
|
502
|
+
@sharding_initialized = true
|
499
503
|
end
|
500
504
|
|
501
505
|
# in-process caching
|
@@ -21,7 +21,7 @@ module Switchman
|
|
21
21
|
base_db = build_db_config_from_raw_config(env_name, name, base_config)
|
22
22
|
[base_db] + roles.map do |role|
|
23
23
|
build_db_config_from_raw_config(env_name, "#{env_name}/#{role}",
|
24
|
-
base_config.merge(config[role])
|
24
|
+
base_config.merge(config[role]))
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -270,11 +270,11 @@ module Switchman
|
|
270
270
|
right_node = or_expr.right
|
271
271
|
new_left_predicates = transpose_single_predicate(left_node, source_shard,
|
272
272
|
target_shard, remove_nonlocal_primary_keys: remove_nonlocal_primary_keys)
|
273
|
-
or_expr.instance_variable_set(:@left, new_left_predicates) if new_left_predicates != left_node
|
274
273
|
new_right_predicates = transpose_single_predicate(right_node, source_shard,
|
275
274
|
target_shard, remove_nonlocal_primary_keys: remove_nonlocal_primary_keys)
|
276
|
-
|
277
|
-
|
275
|
+
return predicate if new_left_predicates == left_node && new_right_predicates == right_node
|
276
|
+
|
277
|
+
return ::Arel::Nodes::Grouping.new ::Arel::Nodes::Or.new(new_left_predicates, new_right_predicates)
|
278
278
|
end
|
279
279
|
return predicate unless predicate.is_a?(::Arel::Nodes::Binary) || predicate.is_a?(::Arel::Nodes::HomogeneousIn)
|
280
280
|
return predicate unless predicate.left.is_a?(::Arel::Attributes::Attribute)
|
data/lib/switchman/arel.rb
CHANGED
@@ -11,22 +11,44 @@ module Switchman
|
|
11
11
|
module Visitors
|
12
12
|
module ToSql
|
13
13
|
# rubocop:disable Naming/MethodName
|
14
|
+
# rubocop:disable Naming/MethodParameterName
|
14
15
|
|
15
|
-
def visit_Arel_Nodes_TableAlias(
|
16
|
-
o, collector = args
|
16
|
+
def visit_Arel_Nodes_TableAlias(o, collector)
|
17
17
|
collector = visit o.relation, collector
|
18
18
|
collector << ' '
|
19
19
|
collector << quote_local_table_name(o.name)
|
20
20
|
end
|
21
21
|
|
22
|
-
def visit_Arel_Attributes_Attribute(
|
23
|
-
o = args.first
|
22
|
+
def visit_Arel_Attributes_Attribute(o, collector)
|
24
23
|
join_name = o.relation.table_alias || o.relation.name
|
25
|
-
|
26
|
-
|
24
|
+
collector << quote_local_table_name(join_name) << '.' << quote_column_name(o.name)
|
25
|
+
end
|
26
|
+
|
27
|
+
def visit_Arel_Nodes_HomogeneousIn(o, collector)
|
28
|
+
collector.preparable = false
|
29
|
+
|
30
|
+
collector << quote_local_table_name(o.table_name) << '.' << quote_column_name(o.column_name)
|
31
|
+
|
32
|
+
collector << if o.type == :in
|
33
|
+
' IN ('
|
34
|
+
else
|
35
|
+
' NOT IN ('
|
36
|
+
end
|
37
|
+
|
38
|
+
values = o.casted_values
|
39
|
+
|
40
|
+
if values.empty?
|
41
|
+
collector << @connection.quote(nil)
|
42
|
+
else
|
43
|
+
collector.add_binds(values, o.proc_for_binds, &bind_block)
|
44
|
+
end
|
45
|
+
|
46
|
+
collector << ')'
|
47
|
+
collector
|
27
48
|
end
|
28
49
|
|
29
50
|
# rubocop:enable Naming/MethodName
|
51
|
+
# rubocop:enable Naming/MethodParameterName
|
30
52
|
|
31
53
|
def quote_local_table_name(name)
|
32
54
|
return name if ::Arel::Nodes::SqlLiteral === name
|
data/lib/switchman/rails.rb
CHANGED
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: 3.0.
|
4
|
+
version: 3.0.10
|
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: 2022-
|
13
|
+
date: 2022-03-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|