kasket 4.10.4 → 4.11.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/README.md +1 -1
- data/lib/kasket/configuration_mixin.rb +2 -6
- data/lib/kasket/read_mixin.rb +3 -7
- data/lib/kasket/relation_mixin.rb +2 -5
- data/lib/kasket/version.rb +1 -1
- data/lib/kasket/visitor.rb +24 -13
- data/lib/kasket/write_mixin.rb +8 -25
- data/lib/kasket.rb +2 -5
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 724d92677bcdc757b647c3238bd34e53ea21bfc17887c59186cf4431c584eda3
|
4
|
+
data.tar.gz: 38ff26970191ff1926d1e3d50e026d2d503398ef2b1bb884943b36e4e6bc4d37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d32c14b1c040d6bca217235bb7c98c2f9a042a33a38b57ee3bc0acf4ac0695eb4b1d05039df354aef624f445a09fe93ef93fb0d29a3edfcf312c5ba957404be
|
7
|
+
data.tar.gz: 506931cd595e66cccd2a6feeddeb2ff41dde52aba0fac6f5bd9e99f53b242eb5ef2626e1ff5f31c3d388594c4628e0d75fb86e7c76892e77625d441f19a393d7
|
data/README.md
CHANGED
@@ -101,12 +101,8 @@ module Kasket
|
|
101
101
|
def kasket_quoted_value_for_column(value, column)
|
102
102
|
if column
|
103
103
|
conn = connection
|
104
|
-
|
105
|
-
|
106
|
-
when 3 then column.type_cast(value)
|
107
|
-
when 4 then column.type_cast_for_database(value)
|
108
|
-
else conn.type_cast_from_column(column, value)
|
109
|
-
end
|
104
|
+
type = conn.lookup_cast_type_from_column(column)
|
105
|
+
casted_value = conn.type_cast(type.serialize(value))
|
110
106
|
conn.quote(casted_value).downcase
|
111
107
|
else
|
112
108
|
value.to_s
|
data/lib/kasket/read_mixin.rb
CHANGED
@@ -14,14 +14,10 @@ module Kasket
|
|
14
14
|
|
15
15
|
if use_kasket?
|
16
16
|
query = if sql.respond_to?(:to_kasket_query)
|
17
|
-
if ActiveRecord::VERSION::
|
18
|
-
sql.to_kasket_query(self, args[1])
|
17
|
+
if ActiveRecord::VERSION::STRING < '5.2'
|
18
|
+
sql.to_kasket_query(self, args[1].map(&:value_for_database))
|
19
19
|
else
|
20
|
-
|
21
|
-
sql.to_kasket_query(self, args[1].map(&:value_for_database))
|
22
|
-
else
|
23
|
-
sql.to_kasket_query(self)
|
24
|
-
end
|
20
|
+
sql.to_kasket_query(self)
|
25
21
|
end
|
26
22
|
else
|
27
23
|
kasket_parser.parse(sanitize_sql(sql))
|
@@ -1,12 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module Kasket
|
3
3
|
module RelationMixin
|
4
|
-
|
5
|
-
def to_kasket_query(binds = nil)
|
4
|
+
def to_kasket_query
|
6
5
|
if arel.is_a?(Arel::SelectManager)
|
7
|
-
if ActiveRecord::VERSION::
|
8
|
-
arel.to_kasket_query(klass, (binds || bind_values))
|
9
|
-
elsif ActiveRecord::VERSION::STRING < '5.2'
|
6
|
+
if ActiveRecord::VERSION::STRING < '5.2'
|
10
7
|
arel.to_kasket_query(klass, (@values[:where].to_h.values + Array(@values[:limit])))
|
11
8
|
else
|
12
9
|
arel.to_kasket_query(klass)
|
data/lib/kasket/version.rb
CHANGED
data/lib/kasket/visitor.rb
CHANGED
@@ -49,7 +49,7 @@ module Kasket
|
|
49
49
|
|
50
50
|
def visit_Arel_Nodes_SelectCore(node, *_)
|
51
51
|
return :unsupported if node.groups.any?
|
52
|
-
return :unsupported if
|
52
|
+
return :unsupported if node.havings.present?
|
53
53
|
return :unsupported if node.set_quantifier
|
54
54
|
return :unsupported if !node.source || node.source.empty?
|
55
55
|
return :unsupported if node.projections.empty?
|
@@ -65,6 +65,14 @@ module Kasket
|
|
65
65
|
return unless (column_names - projection_names).empty?
|
66
66
|
end
|
67
67
|
|
68
|
+
# un-optimize AR 6.1 by adding a redundant And node to hit visitor below
|
69
|
+
if ActiveRecord::VERSION::STRING.start_with? "6.1"
|
70
|
+
if node.wheres.size == 1
|
71
|
+
n = node.wheres[0]
|
72
|
+
node.wheres[0] = Arel::Nodes::And.new([n]) unless n.is_a?(Arel::Nodes::And)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
68
76
|
parts = [visit(node.source)]
|
69
77
|
|
70
78
|
parts += node.wheres.map {|where| visit(where) }
|
@@ -73,11 +81,7 @@ module Kasket
|
|
73
81
|
end
|
74
82
|
|
75
83
|
def visit_Arel_Nodes_Limit(node, *_)
|
76
|
-
|
77
|
-
{ limit: node.value.to_i }
|
78
|
-
else
|
79
|
-
{ limit: visit(node.value).to_i }
|
80
|
-
end
|
84
|
+
{ limit: visit(node.value).to_i }
|
81
85
|
end
|
82
86
|
|
83
87
|
def visit_Arel_Nodes_JoinSource(node, *_)
|
@@ -106,6 +110,8 @@ module Kasket
|
|
106
110
|
[left, visit(node.right)]
|
107
111
|
end
|
108
112
|
|
113
|
+
alias_method :visit_Arel_Nodes_HomogeneousIn, :visit_Arel_Nodes_In
|
114
|
+
|
109
115
|
def visit_Arel_Nodes_Equality(node, *_)
|
110
116
|
right =
|
111
117
|
case node.right
|
@@ -134,14 +140,10 @@ module Kasket
|
|
134
140
|
end
|
135
141
|
|
136
142
|
def visit_Arel_Nodes_BindParam(node, *_)
|
137
|
-
if ActiveRecord::VERSION::
|
138
|
-
visit(@binds.shift
|
143
|
+
if ActiveRecord::VERSION::STRING < '5.2'
|
144
|
+
visit(@binds.shift)
|
139
145
|
else
|
140
|
-
|
141
|
-
visit(@binds.shift)
|
142
|
-
else
|
143
|
-
visit(node.value.value) unless node.value.value.nil?
|
144
|
-
end
|
146
|
+
visit(node.value.value) unless node.value.value.nil?
|
145
147
|
end
|
146
148
|
end
|
147
149
|
|
@@ -157,6 +159,15 @@ module Kasket
|
|
157
159
|
else quoted(node.val)
|
158
160
|
end
|
159
161
|
end
|
162
|
+
else # R52: val -> value
|
163
|
+
def visit_Arel_Nodes_Casted(node, *_)
|
164
|
+
v = node.value
|
165
|
+
case v
|
166
|
+
when nil then nil
|
167
|
+
when String then v
|
168
|
+
else quoted(v)
|
169
|
+
end
|
170
|
+
end
|
160
171
|
end
|
161
172
|
|
162
173
|
def visit_TrueClass(_node)
|
data/lib/kasket/write_mixin.rb
CHANGED
@@ -41,11 +41,7 @@ module Kasket
|
|
41
41
|
attribute_sets = [attributes]
|
42
42
|
|
43
43
|
previous_changes = options[:previous_changes]
|
44
|
-
previous_changes ||=
|
45
|
-
saved_changes.transform_values(&:first)
|
46
|
-
else
|
47
|
-
previous_changes() # keep parens or rename the local var
|
48
|
-
end
|
44
|
+
previous_changes ||= saved_changes.transform_values(&:first)
|
49
45
|
if previous_changes.present?
|
50
46
|
old_attributes = previous_changes.each_with_object({}) do |(attribute, (old, _)), all|
|
51
47
|
all[attribute.to_s] = old
|
@@ -93,23 +89,14 @@ module Kasket
|
|
93
89
|
super
|
94
90
|
end
|
95
91
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
clear_kasket_indices(previous_changes: previous_changes)
|
101
|
-
result
|
102
|
-
end
|
103
|
-
else
|
104
|
-
def update_columns(new_attributes)
|
105
|
-
previous_attributes = attributes
|
106
|
-
previous_changes = new_attributes.each_with_object({}) do |(k, v), all|
|
107
|
-
all[k] = [previous_attributes[k.to_s], v]
|
108
|
-
end
|
109
|
-
result = super
|
110
|
-
clear_kasket_indices(previous_changes: previous_changes)
|
111
|
-
result
|
92
|
+
def update_columns(new_attributes)
|
93
|
+
previous_attributes = attributes
|
94
|
+
previous_changes = new_attributes.each_with_object({}) do |(k, v), all|
|
95
|
+
all[k] = [previous_attributes[k.to_s], v]
|
112
96
|
end
|
97
|
+
result = super
|
98
|
+
clear_kasket_indices(previous_changes: previous_changes)
|
99
|
+
result
|
113
100
|
end
|
114
101
|
|
115
102
|
def kasket_after_commit_dummy
|
@@ -148,10 +135,6 @@ module Kasket
|
|
148
135
|
model_class.after_destroy :kasket_after_destroy
|
149
136
|
model_class.after_commit :kasket_after_commit_dummy
|
150
137
|
|
151
|
-
if ActiveRecord::VERSION::MAJOR == 3 || (ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 0)
|
152
|
-
model_class.after_touch :kasket_after_commit
|
153
|
-
end
|
154
|
-
|
155
138
|
class << model_class
|
156
139
|
alias_method :transaction_without_kasket_disabled, :transaction
|
157
140
|
alias_method :transaction, :transaction_with_kasket_disabled
|
data/lib/kasket.rb
CHANGED
@@ -31,11 +31,8 @@ module Kasket
|
|
31
31
|
CONFIGURATION[:default_expires_in] = options[:default_expires_in] if options[:default_expires_in]
|
32
32
|
|
33
33
|
ActiveRecord::Base.extend(Kasket::ConfigurationMixin)
|
34
|
-
|
35
|
-
|
36
|
-
ActiveRecord::Relation.include Kasket::RelationMixin
|
37
|
-
Arel::SelectManager.include Kasket::SelectManagerMixin
|
38
|
-
end
|
34
|
+
ActiveRecord::Relation.include(Kasket::RelationMixin)
|
35
|
+
Arel::SelectManager.include(Kasket::SelectManagerMixin)
|
39
36
|
end
|
40
37
|
|
41
38
|
def self.cache_store=(options)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kasket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mick Staugaard
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-01-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -17,20 +17,20 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '5.1'
|
21
21
|
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
23
|
+
version: '7'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
28
|
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: '
|
30
|
+
version: '5.1'
|
31
31
|
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '7'
|
34
34
|
description: puts a cap on your queries
|
35
35
|
email:
|
36
36
|
- mick@zendesk.com
|
@@ -61,7 +61,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
61
61
|
requirements:
|
62
62
|
- - ">="
|
63
63
|
- !ruby/object:Gem::Version
|
64
|
-
version: 2.
|
64
|
+
version: 2.6.0
|
65
65
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - ">="
|