active_record_distinct_on 1.4.0 → 1.6.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38d33c7a7f570e02ceb147096f0b7188fb7e1ee2635a4e8f82b202d29b376fc7
|
4
|
+
data.tar.gz: 727d6136fc485ed8345577faf848c14226b137c742e6de4e7aaeede643f8068c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1444a225b36e0d8a4ee643f9809da508c1200cc59fda5e879f18868966691b363e3260cc3e75586d573c34855d4ad0ccb1a70ec4283805ba9285476a1e8a12f
|
7
|
+
data.tar.gz: 313b0043440861f930892be999bad626e04ed841c13d683546115b8a7938478907cfa9c736d7c02f65be6e6ee4255607a9a686386be30ac71f03a87f1b24b1ba
|
@@ -32,25 +32,53 @@ module ActiveRecordDistinctOn
|
|
32
32
|
self
|
33
33
|
end
|
34
34
|
|
35
|
+
def count(column_name = nil)
|
36
|
+
if distinct_on_values.empty?
|
37
|
+
super
|
38
|
+
else
|
39
|
+
if column_name && column_name != :all
|
40
|
+
raise ArgumentError,
|
41
|
+
"Cannot use column_name to .count for scopes that already specify `distinct_on` values"
|
42
|
+
end
|
43
|
+
|
44
|
+
# See https://github.com/rails/rails/pull/41622#issuecomment-1303078730
|
45
|
+
# We need to convert SQL that looks like "SELECT DISTINCT ON ( "dogs"."id" ) COUNT(*) FROM "dogs" ..."
|
46
|
+
# into SQL that looks like "SELECT COUNT(DISTINCT ( "dogs"."id" )) FROM "dogs" ...".
|
47
|
+
scope = spawn
|
48
|
+
scope.distinct_on_values = FROZEN_EMPTY_ARRAY
|
49
|
+
|
50
|
+
column_names = distinct_on_arel_columns.map do |col|
|
51
|
+
"\"#{col.relation.name}\".\"#{col.name}\""
|
52
|
+
end
|
53
|
+
|
54
|
+
scope.count("distinct #{column_names.join(', ')}")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
35
58
|
private
|
36
59
|
|
37
60
|
def build_arel(*)
|
38
61
|
super.tap do |arel|
|
39
|
-
build_distinct_on(arel
|
62
|
+
build_distinct_on(arel)
|
40
63
|
end
|
41
64
|
end
|
42
65
|
|
43
|
-
def build_distinct_on(arel
|
44
|
-
return if
|
66
|
+
def build_distinct_on(arel)
|
67
|
+
return if distinct_on_values.empty?
|
45
68
|
|
46
|
-
|
69
|
+
arel.distinct_on(distinct_on_arel_columns)
|
70
|
+
end
|
71
|
+
|
72
|
+
def distinct_on_arel_columns
|
73
|
+
arel_attributes = distinct_on_values.map { |field|
|
47
74
|
if klass.attribute_alias?(field)
|
48
75
|
arel_table[klass.attribute_alias(field).to_sym]
|
49
76
|
else
|
50
77
|
arel_table[field]
|
51
78
|
end
|
52
79
|
}
|
53
|
-
|
80
|
+
|
81
|
+
arel_columns arel_attributes
|
54
82
|
end
|
55
83
|
end
|
56
84
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_record_distinct_on
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alec Larsen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,20 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '6.1'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '7.
|
22
|
+
version: '7.2'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '6.1'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '7.
|
32
|
+
version: '7.2'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: bundler
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,6 +128,20 @@ dependencies:
|
|
128
128
|
- - ">="
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '0'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: pg
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
131
145
|
description: ActiveRecordDistinctOn adds support for `DISTINCT ON` to ActiveRecord.
|
132
146
|
At the time of this writing, PostgreSQL is the only database which supports this
|
133
147
|
syntax; however, this gem has been written with database independence in mind so
|
@@ -162,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
176
|
- !ruby/object:Gem::Version
|
163
177
|
version: '0'
|
164
178
|
requirements: []
|
165
|
-
rubygems_version: 3.2.
|
179
|
+
rubygems_version: 3.2.22
|
166
180
|
signing_key:
|
167
181
|
specification_version: 4
|
168
182
|
summary: Adds support for `DISTINCT ON` statements when querying with ActiveRecord
|