postgresql_cursor 0.6.8 → 0.6.10
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 +12 -1
- data/lib/postgresql_cursor/cursor.rb +9 -6
- data/lib/postgresql_cursor/version.rb +1 -1
- data/test/helper.rb +2 -1
- data/test/test_postgresql_cursor.rb +9 -0
- metadata +3 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2f3ff65f7729e47f2630546a0caa51c715cc06763c8ab85d0d1911c6d3378d90
|
|
4
|
+
data.tar.gz: 3b3c164c8a636d08cd0b6acc6d39c1744d7431f6114a151ac8dda01539534af8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d8ba42dcbf0aea30a3237b9a01cf58dacab95e8edfe5ba35bb7d0263ef5356a9c51d7e171478ff23bc58f9d01d6afdaa09bfad994ef2d8f193b0f83c804cb2a5
|
|
7
|
+
data.tar.gz: 8728363450c4aeb2a90ae1e89597d18302740bb463b7663ac5d4383cb0ff2f29ea669b2a12f35e111b7b42eb22b8bdac8865ec595c54f8d536295f1343e4081c
|
data/README.md
CHANGED
|
@@ -88,6 +88,17 @@ Product.each_row.map {|r| r["id"].to_i } #=> [1, 2, 3, ...]
|
|
|
88
88
|
Product.each_instance.map {|r| r.id }.each {|id| p id } #=> [1, 2, 3, ...]
|
|
89
89
|
Product.each_instance.lazy.inject(0) {|sum,r| sum + r.quantity } #=> 499500
|
|
90
90
|
```
|
|
91
|
+
|
|
92
|
+
### PostgreSQLCursor and collection rendering
|
|
93
|
+
|
|
94
|
+
You can render cursor collection, using enumeration as collection attribute.
|
|
95
|
+
|
|
96
|
+
```ruby
|
|
97
|
+
render partial: "some_partial", collection: Product.each_instance
|
|
98
|
+
render partial: "some_partial", collection: Product.each_row
|
|
99
|
+
render partial: "some_partial", collection: Product.each_hash
|
|
100
|
+
```
|
|
101
|
+
|
|
91
102
|
### Hashes vs. Instances
|
|
92
103
|
|
|
93
104
|
The each_row method returns the Hash of strings for speed (as this allows you to process a lot of rows).
|
|
@@ -106,7 +117,7 @@ To limit the columns returned to just those you need, use `.select(:id, :name)`
|
|
|
106
117
|
query method.
|
|
107
118
|
|
|
108
119
|
```ruby
|
|
109
|
-
Product.select(:id, :name).
|
|
120
|
+
Product.select(:id, :name).each_instance { |product| product.process }
|
|
110
121
|
```
|
|
111
122
|
|
|
112
123
|
Pluck is a great alternative instead of using a cursor. It does not instantiate
|
|
@@ -71,6 +71,12 @@ module PostgreSQLCursor
|
|
|
71
71
|
self
|
|
72
72
|
end
|
|
73
73
|
|
|
74
|
+
# ActiveRecord call #size when rendering a collection
|
|
75
|
+
# Define it and return some dummy value
|
|
76
|
+
def size
|
|
77
|
+
-1
|
|
78
|
+
end
|
|
79
|
+
|
|
74
80
|
# Public: Yields each row of the result set to the passed block
|
|
75
81
|
#
|
|
76
82
|
# Yields the row to the block. The row is a hash with symbolized keys.
|
|
@@ -292,12 +298,9 @@ module PostgreSQLCursor
|
|
|
292
298
|
# This is a value between 0.1 and 1.0 (PostgreSQL defaults to 0.1, this library defaults to 1.0)
|
|
293
299
|
# used to determine the expected fraction (percent) of result rows returned the the caller.
|
|
294
300
|
# This value determines the access path by the query planner.
|
|
295
|
-
def set_cursor_tuple_fraction
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
@cursor_tuple_fraction = frac
|
|
299
|
-
@result = @connection.execute("set cursor_tuple_fraction to #{frac}")
|
|
300
|
-
frac
|
|
301
|
+
def set_cursor_tuple_fraction
|
|
302
|
+
frac = @options.fetch(:fraction, 1.0)
|
|
303
|
+
@result = @connection.execute("set cursor_tuple_fraction to #{frac}")
|
|
301
304
|
end
|
|
302
305
|
end
|
|
303
306
|
end
|
data/test/helper.rb
CHANGED
|
@@ -12,7 +12,8 @@ ActiveRecord::Base.establish_connection(adapter: 'postgresql',
|
|
|
12
12
|
class Product < ActiveRecord::Base
|
|
13
13
|
has_many :prices
|
|
14
14
|
|
|
15
|
-
# create table
|
|
15
|
+
# create table products (id serial primary key, data varchar);
|
|
16
|
+
# create table prices (id serial primary key, product_id integer references products(id));
|
|
16
17
|
def self.generate(max=1_000)
|
|
17
18
|
max.times do |i|
|
|
18
19
|
connection.execute("insert into products values (#{i+1})")
|
|
@@ -225,4 +225,13 @@ class TestPostgresqlCursor < Minitest::Test
|
|
|
225
225
|
cursor = Product.first.prices.each_instance
|
|
226
226
|
refute cursor.instance_variable_get(:@type).loaded?
|
|
227
227
|
end
|
|
228
|
+
|
|
229
|
+
def test_size
|
|
230
|
+
r = Product.each_instance
|
|
231
|
+
assert_equal -1, r.size
|
|
232
|
+
r = Product.each_hash
|
|
233
|
+
assert_equal -1, r.size
|
|
234
|
+
r = Product.each_row
|
|
235
|
+
assert_equal -1, r.size
|
|
236
|
+
end
|
|
228
237
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: postgresql_cursor
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Allen Fair
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: activerecord
|
|
@@ -134,7 +133,6 @@ homepage: http://github.com/afair/postgresql_cursor
|
|
|
134
133
|
licenses:
|
|
135
134
|
- MIT
|
|
136
135
|
metadata: {}
|
|
137
|
-
post_install_message:
|
|
138
136
|
rdoc_options: []
|
|
139
137
|
require_paths:
|
|
140
138
|
- lib
|
|
@@ -149,8 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
149
147
|
- !ruby/object:Gem::Version
|
|
150
148
|
version: '0'
|
|
151
149
|
requirements: []
|
|
152
|
-
rubygems_version:
|
|
153
|
-
signing_key:
|
|
150
|
+
rubygems_version: 4.0.6
|
|
154
151
|
specification_version: 4
|
|
155
152
|
summary: ActiveRecord PostgreSQL Adapter extension for using a cursor to return a
|
|
156
153
|
large result set
|