occams-record 1.6.2 → 1.7.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 +13 -0
- data/lib/occams-record/pluck.rb +15 -0
- data/lib/occams-record/query.rb +23 -0
- data/lib/occams-record/raw_query.rb +23 -0
- data/lib/occams-record/version.rb +1 -1
- data/lib/occams-record.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f2590ba264934763d86310d4cd9b92459cb053589afa23fb4ea4c4b423f2eb7
|
4
|
+
data.tar.gz: abb8aad716399e6b87d351e33a8f9ff629256964aed2f131795255cec3353b2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2aa46cce2b26cd5a6e0219651dcdace5391a7a1b67ae5d4e6c3a9a849c6b12a63a2c913208af0ae58d5e7c7ce6880fdc2c1081a3a4b7582b2a8300f76548c0e3
|
7
|
+
data.tar.gz: c3cdc38d42b7c97894bbe34215e9a8143209732c78fd8b5d8351932d5e7290783ec8239c8f5c21e6fa4f2f36325b97a76088953a9b0a28a7fd71c697aaa91993
|
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
> Do not multiply entities beyond necessity. -- Occam's Razor
|
4
4
|
|
5
|
+
Full documentation is available at [rubydoc.info/gems/occams-record](http://www.rubydoc.info/gems/occams-record).
|
6
|
+
|
5
7
|
OccamsRecord is a high-efficiency, advanced query library for use alongside ActiveRecord. It is **not** an ORM or an ActiveRecord replacement. OccamsRecord can breathe fresh life into your ActiveRecord app by giving it two things:
|
6
8
|
|
7
9
|
### 1) Huge performance gains
|
@@ -73,6 +75,17 @@ OccamsRecord
|
|
73
75
|
.eager_load(:orders)
|
74
76
|
```
|
75
77
|
|
78
|
+
**Use `pluck` with raw SQL**
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
OccamsRecord
|
82
|
+
.sql("
|
83
|
+
SELECT some_col FROM users
|
84
|
+
INNER JOIN ...
|
85
|
+
")
|
86
|
+
.pluck(:some_col)
|
87
|
+
```
|
88
|
+
|
76
89
|
**Eager load "ad hoc associations" using raw SQL**
|
77
90
|
|
78
91
|
Relationships are complicated, and sometimes they can't be expressed in ActiveRecord models. Define your relationship on the fly!
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module OccamsRecord
|
2
|
+
module Pluck
|
3
|
+
private
|
4
|
+
|
5
|
+
def pluck_results(results, cols)
|
6
|
+
if cols.size == 1
|
7
|
+
col = cols[0].to_s
|
8
|
+
results.map { |r| r[col] }
|
9
|
+
else
|
10
|
+
cols = cols.map(&:to_s)
|
11
|
+
results.map { |r| r.values_at(*cols) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/occams-record/query.rb
CHANGED
@@ -36,6 +36,7 @@ module OccamsRecord
|
|
36
36
|
attr_reader :scope
|
37
37
|
|
38
38
|
include OccamsRecord::Batches::CursorHelpers
|
39
|
+
include OccamsRecord::Pluck
|
39
40
|
include EagerLoaders::Builder
|
40
41
|
include Enumerable
|
41
42
|
include Measureable
|
@@ -225,5 +226,27 @@ module OccamsRecord
|
|
225
226
|
use: @use, query_logger: @query_logger, eager_loaders: @eager_loaders,
|
226
227
|
)
|
227
228
|
end
|
229
|
+
|
230
|
+
#
|
231
|
+
# Returns the specified column(s) as an array of values.
|
232
|
+
#
|
233
|
+
# If more than one column is given, the result will be an array of arrays.
|
234
|
+
#
|
235
|
+
# @param cols [Array] one or more column names as Symbols or Strings. Also accepts SQL functions, e.g. "LENGTH(name)".
|
236
|
+
# @return [Array]
|
237
|
+
#
|
238
|
+
def pluck(*cols)
|
239
|
+
sql = (block_given? ? yield(scope).to_sql : scope).select(*cols).to_sql
|
240
|
+
@query_logger << "#{@eager_loaders.tracer}: #{sql}" if @query_logger
|
241
|
+
result = if measure?
|
242
|
+
record_start_time!
|
243
|
+
measure!(model.table_name, sql) {
|
244
|
+
model.connection.exec_query sql
|
245
|
+
}
|
246
|
+
else
|
247
|
+
model.connection.exec_query sql
|
248
|
+
end
|
249
|
+
pluck_results result, cols
|
250
|
+
end
|
228
251
|
end
|
229
252
|
end
|
@@ -62,6 +62,7 @@ module OccamsRecord
|
|
62
62
|
attr_reader :binds
|
63
63
|
|
64
64
|
include OccamsRecord::Batches::CursorHelpers
|
65
|
+
include OccamsRecord::Pluck
|
65
66
|
include EagerLoaders::Builder
|
66
67
|
include Enumerable
|
67
68
|
include Measureable
|
@@ -209,6 +210,28 @@ module OccamsRecord
|
|
209
210
|
)
|
210
211
|
end
|
211
212
|
|
213
|
+
#
|
214
|
+
# Returns the specified column(s) as an array of values.
|
215
|
+
#
|
216
|
+
# If more than one column is given, the result will be an array of arrays.
|
217
|
+
#
|
218
|
+
# @param cols [Array] one or more column names as Symbols or Strings. Also accepts SQL functions, e.g. "LENGTH(name)".
|
219
|
+
# @return [Array]
|
220
|
+
#
|
221
|
+
def pluck(*cols)
|
222
|
+
_escaped_sql = escaped_sql
|
223
|
+
@query_logger << _escaped_sql if @query_logger
|
224
|
+
result = if measure?
|
225
|
+
record_start_time!
|
226
|
+
measure!(table_name, _escaped_sql) {
|
227
|
+
conn.exec_query _escaped_sql
|
228
|
+
}
|
229
|
+
else
|
230
|
+
conn.exec_query _escaped_sql
|
231
|
+
end
|
232
|
+
pluck_results result, cols
|
233
|
+
end
|
234
|
+
|
212
235
|
private
|
213
236
|
|
214
237
|
# Returns the SQL as a String with all variables escaped
|
data/lib/occams-record.rb
CHANGED
@@ -5,6 +5,7 @@ require 'occams-record/measureable'
|
|
5
5
|
require 'occams-record/eager_loaders/eager_loaders'
|
6
6
|
require 'occams-record/results/results'
|
7
7
|
require 'occams-record/results/row'
|
8
|
+
require 'occams-record/pluck'
|
8
9
|
require 'occams-record/cursor'
|
9
10
|
require 'occams-record/errors'
|
10
11
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: occams-record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jordan Hollinger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -74,6 +74,7 @@ files:
|
|
74
74
|
- lib/occams-record/errors.rb
|
75
75
|
- lib/occams-record/measureable.rb
|
76
76
|
- lib/occams-record/merge.rb
|
77
|
+
- lib/occams-record/pluck.rb
|
77
78
|
- lib/occams-record/query.rb
|
78
79
|
- lib/occams-record/raw_query.rb
|
79
80
|
- lib/occams-record/results/results.rb
|