ar_cache 1.3.0 → 1.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -2
- data/Gemfile.lock +1 -1
- data/lib/ar_cache/active_record.rb +4 -0
- data/lib/ar_cache/active_record/associations/association.rb +0 -23
- data/lib/ar_cache/active_record/associations/has_one_through_association.rb +27 -0
- data/lib/ar_cache/active_record/associations/singular_association.rb +16 -0
- data/lib/ar_cache/configuration.rb +0 -1
- data/lib/ar_cache/query.rb +3 -3
- data/lib/ar_cache/table.rb +4 -5
- data/lib/ar_cache/version.rb +1 -1
- data/lib/generators/ar_cache/templates/configuration.rb +0 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56df5f788fb94d493c94dca6942c80819ae1fa1c567b9b6228020ad935c35c4f
|
4
|
+
data.tar.gz: 2b253f18c8174b39159f6bb0c79f298c0064a35c05ac4334719e6ca50db13a26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 536189cb015607a2fd12c85f03f995ae7443b5a019e72b37526cb371a994182bad76a010c0b2f05e06be1041fee7e5bb7177ebe946155a5de73df827a66521d6
|
7
|
+
data.tar.gz: f65ea53cc987f2b3aed000408fd8b70da94dfc56a27f04db5e0aed33dac41ad7838aec761640cbff037fa7d733c5b538428154f6e082533051a20a8bf5740b52
|
data/CHANGELOG.md
CHANGED
@@ -2,10 +2,16 @@
|
|
2
2
|
|
3
3
|
## main
|
4
4
|
|
5
|
+
## 1.4.0 (2021-03-15 UTC)
|
6
|
+
|
7
|
+
[Commit [#7cc9ec8](https://github.com/OuYangJinTing/ar_cache/commit/7cc9ec8047394bb7758e25edd3b42fa48bb88640)]:
|
8
|
+
|
9
|
+
- Remove `ArCache::Table` `ignored_columns` configuration.
|
10
|
+
- Fix `ActiveRecord` call `#select` write to cache data is incomplete.
|
11
|
+
|
5
12
|
## 1.3.0 (2021-03-13 UTC)
|
6
13
|
|
7
|
-
- [Commit [#4ec14e9](https://github.com/OuYangJinTing/ar_cache/commit/4ec14e9e762abb57a8ff18aa8c93a514db49c552)]:
|
8
|
-
Optimize association cache, only cacheable association use ArCache query now.
|
14
|
+
- [Commit [#4ec14e9](https://github.com/OuYangJinTing/ar_cache/commit/4ec14e9e762abb57a8ff18aa8c93a514db49c552)]: Optimize association cache, only cacheable association use ArCache query now.
|
9
15
|
|
10
16
|
## 1.2.0 (2021-03-12 UTC)
|
11
17
|
|
data/Gemfile.lock
CHANGED
@@ -6,6 +6,8 @@ require 'ar_cache/active_record/core'
|
|
6
6
|
require 'ar_cache/active_record/persistence'
|
7
7
|
require 'ar_cache/active_record/insert_all'
|
8
8
|
require 'ar_cache/active_record/associations/association'
|
9
|
+
require 'ar_cache/active_record/associations/singular_association'
|
10
|
+
require 'ar_cache/active_record/associations/has_one_through_association'
|
9
11
|
require 'ar_cache/active_record/connection_adapters/abstract/transaction'
|
10
12
|
require 'ar_cache/active_record/connection_adapters/abstract/database_statements'
|
11
13
|
|
@@ -24,6 +26,8 @@ ActiveSupport.on_load(:active_record, run_once: true) do
|
|
24
26
|
ActiveRecord::Relation.prepend(ArCache::ActiveRecord::Relation)
|
25
27
|
|
26
28
|
ActiveRecord::Associations::Association.prepend(ArCache::ActiveRecord::Associations::Association)
|
29
|
+
ActiveRecord::Associations::SingularAssociation.prepend(ArCache::ActiveRecord::Associations::SingularAssociation)
|
30
|
+
ActiveRecord::Associations::HasOneThroughAssociation.prepend(ArCache::ActiveRecord::Associations::HasOneThroughAssociation)
|
27
31
|
|
28
32
|
ActiveRecord::ConnectionAdapters::NullTransaction.prepend(ArCache::ActiveRecord::ConnectionAdapters::NullTransaction)
|
29
33
|
ActiveRecord::ConnectionAdapters::RealTransaction.prepend(ArCache::ActiveRecord::ConnectionAdapters::Transaction)
|
@@ -4,32 +4,9 @@ module ArCache
|
|
4
4
|
module ActiveRecord
|
5
5
|
module Associations
|
6
6
|
module Association
|
7
|
-
PRELOADER = ::ActiveRecord::Associations::Preloader.new
|
8
|
-
|
9
7
|
def reload(...)
|
10
8
|
loaded? ? ArCache.skip { super } : super
|
11
9
|
end
|
12
|
-
|
13
|
-
# TODO: Implement CollectionAssociation cache
|
14
|
-
private def find_target # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
|
15
|
-
return super if ArCache.skip? || reflection.collection?
|
16
|
-
return super unless ArCache.cache_reflection?(reflection) do
|
17
|
-
if reflection.is_a?(::ActiveRecord::Reflection::ThroughReflection)
|
18
|
-
ArCache::Query.new(owner.association(through_reflection.name).scope).exec_queries_cacheable? &&
|
19
|
-
ArCache::Query.new(through_reflection.klass.new.association(reflection.source_reflection_name).scope)
|
20
|
-
.exec_queries_cacheable?
|
21
|
-
else
|
22
|
-
ArCache::Query.new(scope).exec_queries_cacheable?
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
if (owner.strict_loading? || reflection.strict_loading?) && owner.validation_context.nil?
|
27
|
-
::ActiveRecord::Base.strict_loading_violation!(owner: owner.class, reflection: reflection)
|
28
|
-
end
|
29
|
-
|
30
|
-
PRELOADER.preload(owner, reflection.name)
|
31
|
-
Array.wrap(owner.association(reflection.name).target)
|
32
|
-
end
|
33
10
|
end
|
34
11
|
end
|
35
12
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ArCache
|
4
|
+
module ActiveRecord
|
5
|
+
module Associations
|
6
|
+
module HasOneThroughAssociation
|
7
|
+
PRELOADER = ::ActiveRecord::Associations::Preloader.new
|
8
|
+
|
9
|
+
private def find_target
|
10
|
+
return super if ArCache.skip?
|
11
|
+
return super unless ArCache.cache_reflection?(reflection) do
|
12
|
+
ArCache::Query.new(owner.association(through_reflection.name).scope).exec_queries_cacheable? &&
|
13
|
+
ArCache::Query.new(source_reflection.active_record.new.association(source_reflection.name).scope)
|
14
|
+
.exec_queries_cacheable?
|
15
|
+
end
|
16
|
+
|
17
|
+
if (owner.strict_loading? || reflection.strict_loading?) && owner.validation_context.nil?
|
18
|
+
Base.strict_loading_violation!(owner: owner.class, reflection: reflection)
|
19
|
+
end
|
20
|
+
|
21
|
+
PRELOADER.preload(owner, reflection.name)
|
22
|
+
target
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ArCache
|
4
|
+
module ActiveRecord
|
5
|
+
module Associations
|
6
|
+
module SingularAssociation
|
7
|
+
private def skip_statement_cache?(...)
|
8
|
+
return super if ArCache.skip?
|
9
|
+
return true if ArCache.cache_reflection?(reflection) { ArCache::Query.new(scope).exec_queries_cacheable? }
|
10
|
+
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -41,7 +41,6 @@ module ArCache
|
|
41
41
|
options = tables_options[name.to_sym] || {}
|
42
42
|
options[:disabled] = disabled unless options.key?(:disabled)
|
43
43
|
options[:select_disabled] = select_disabled unless options.key?(:select_disabled)
|
44
|
-
options[:ignored_columns] = Array(options[:ignored_columns]).map(&:to_s)
|
45
44
|
options[:unique_indexes] = Array(options[:unique_indexes]).map { |index| Array(index).map(&:to_s).uniq }.uniq
|
46
45
|
options
|
47
46
|
end
|
data/lib/ar_cache/query.rb
CHANGED
@@ -23,10 +23,9 @@ module ArCache
|
|
23
23
|
end
|
24
24
|
|
25
25
|
if missed_relation
|
26
|
-
|
27
|
-
|
26
|
+
records += relation.find_by_sql(missed_relation.arel, &block).tap do |rs|
|
27
|
+
table.write(rs) if relation.select_values.empty?
|
28
28
|
end
|
29
|
-
records += relation.find_by_sql(missed_relation.arel, &block).tap { |rs| table.write(rs) }
|
30
29
|
end
|
31
30
|
|
32
31
|
records_order(records)
|
@@ -43,6 +42,7 @@ module ArCache
|
|
43
42
|
return false if relation.klass.ar_cache_table.disabled?
|
44
43
|
return false if relation.skip_query_cache_value
|
45
44
|
return false if relation.lock_value
|
45
|
+
return false if relation.distinct_value
|
46
46
|
return false if relation.group_values.any?
|
47
47
|
return false if relation.joins_values.any?
|
48
48
|
return false if relation.left_outer_joins_values.any?
|
data/lib/ar_cache/table.rb
CHANGED
@@ -4,12 +4,11 @@ module ArCache
|
|
4
4
|
class Table
|
5
5
|
include Marshal
|
6
6
|
|
7
|
-
OPTIONS = %i[disabled select_disabled unique_indexes
|
7
|
+
OPTIONS = %i[disabled select_disabled unique_indexes].freeze
|
8
8
|
|
9
9
|
singleton_class.attr_reader :all
|
10
10
|
|
11
|
-
attr_reader :name, :primary_key, :unique_indexes, :column_indexes, :column_names, :md5,
|
12
|
-
:ignored_columns, :cache_key_prefix
|
11
|
+
attr_reader :name, :primary_key, :unique_indexes, :column_indexes, :column_names, :md5, :cache_key_prefix
|
13
12
|
|
14
13
|
delegate :connection, to: ActiveRecord::Base, private: true
|
15
14
|
|
@@ -32,10 +31,10 @@ module ArCache
|
|
32
31
|
@unique_indexes = normalize_unique_indexes(options.delete(:unique_indexes), columns).freeze
|
33
32
|
options.each { |k, v| instance_variable_set("@#{k}", v) }
|
34
33
|
@disabled = true if @primary_key.nil? # ArCache is depend on primary key implementation.
|
35
|
-
@column_names =
|
34
|
+
@column_names = columns.map(&:name).freeze
|
36
35
|
@column_indexes = @unique_indexes.flatten.uniq.freeze
|
37
36
|
coder = ArCache::Configuration.coder
|
38
|
-
@md5 = Digest::MD5.hexdigest("#{coder}-#{@disabled}-#{columns.to_json}
|
37
|
+
@md5 = Digest::MD5.hexdigest("#{coder}-#{@disabled}-#{columns.to_json}")
|
39
38
|
|
40
39
|
ArCache::Record.store(self)
|
41
40
|
|
data/lib/ar_cache/version.rb
CHANGED
@@ -27,7 +27,6 @@ ArCache.configure do |config|
|
|
27
27
|
# disabled: Boolean,
|
28
28
|
# select_disabled: Boolean,
|
29
29
|
# unique_indexes: Array # eg: [:id, [:name, :statue]], The default is the unique index column of the table.
|
30
|
-
# ignored_columns: Array # eg: [:created_at, :updated_at], defaule [].
|
31
30
|
# },
|
32
31
|
# ...
|
33
32
|
# }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ar_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OuYangJinTing
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -58,6 +58,8 @@ files:
|
|
58
58
|
- lib/ar_cache.rb
|
59
59
|
- lib/ar_cache/active_record.rb
|
60
60
|
- lib/ar_cache/active_record/associations/association.rb
|
61
|
+
- lib/ar_cache/active_record/associations/has_one_through_association.rb
|
62
|
+
- lib/ar_cache/active_record/associations/singular_association.rb
|
61
63
|
- lib/ar_cache/active_record/connection_adapters/abstract/database_statements.rb
|
62
64
|
- lib/ar_cache/active_record/connection_adapters/abstract/transaction.rb
|
63
65
|
- lib/ar_cache/active_record/core.rb
|