postgresql_cursor 0.3.0 → 0.3.1
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.
- data/README.rdoc +9 -3
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/postgresql_cursor.rb +19 -5
- data/postgresql_cursor.gemspec +2 -2
- metadata +4 -4
data/README.rdoc
CHANGED
@@ -16,8 +16,12 @@ The ActiveRecord methods for the cursor return instances of the model class by d
|
|
16
16
|
can pass in a block to override this strategy. For instance, returning Hashes instead of AR instances
|
17
17
|
is faster. Julian's benchmarks showed returning instances was a factor of 4 slower than returning a hash.
|
18
18
|
|
19
|
+
ActiveRecord v3 has initial support in this release. It is deprecating using the conditions in the find()
|
20
|
+
method in favor of Arel scopes and usage. I added a method to Arel for iterate over the results in a buffered
|
21
|
+
way.
|
22
|
+
Model.scope_methods.each_row { |hash| puts hash.inspect }
|
23
|
+
|
19
24
|
NOTE: This gem is intended to replace the 'postgresql-cursor' (with hyphen, not underscore) library.
|
20
|
-
I also plan on supporing ActiveRecord 3.x in the near future.
|
21
25
|
|
22
26
|
==Installation
|
23
27
|
[sudo] gem install postgresql_cursor
|
@@ -45,6 +49,9 @@ it does not implement Enumerable, so no other methods are available.
|
|
45
49
|
|
46
50
|
==Examples
|
47
51
|
|
52
|
+
# Active Record v3 with Arel scopes. This is the new, preferred method of use
|
53
|
+
Account.active.each_row { |hash| puts hash.inspect }
|
54
|
+
|
48
55
|
Account.find_with_cursor(:conditions=>["status = ?", 'good']).each do |row|
|
49
56
|
puts row.to_json
|
50
57
|
end
|
@@ -70,8 +77,7 @@ Allen Fair, allen.fair@gmail.com, http://github.com/afair
|
|
70
77
|
|
71
78
|
Thank you to:
|
72
79
|
* Iulian Dogariu, http://github.com/iulianu (Fixes)
|
73
|
-
* Julian Mehnle,
|
74
|
-
|
80
|
+
* Julian Mehnle, julian@mehnle.net (Suggestions)
|
75
81
|
|
76
82
|
== Note on Patches/Pull Requests
|
77
83
|
|
data/Rakefile
CHANGED
@@ -10,7 +10,7 @@ begin
|
|
10
10
|
gem.email = "allen.fair@gmail.com"
|
11
11
|
gem.homepage = "http://github.com/afair/postgresql_cursor"
|
12
12
|
gem.authors = ["Allen Fair"]
|
13
|
-
gem.add_dependency 'activerecord'
|
13
|
+
gem.add_dependency 'activerecord'
|
14
14
|
gem.add_dependency 'pg'
|
15
15
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
16
16
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.1
|
data/lib/postgresql_cursor.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
gem 'activerecord', '<=2.3.5'
|
2
1
|
require 'active_record'
|
3
2
|
|
4
3
|
# Class to operate a PostgreSQL cursor to buffer a set of rows, and return single rows for processing.
|
@@ -103,12 +102,16 @@ class ActiveRecord::Base
|
|
103
102
|
def find_with_cursor(*args, &block)
|
104
103
|
find_options = args.last.is_a?(Hash) ? args.pop : {}
|
105
104
|
options = find_options.delete(:cursor) || {}
|
106
|
-
validate_find_options(find_options)
|
107
|
-
set_readonly_option!(find_options)
|
108
|
-
sql = construct_finder_sql(find_options)
|
105
|
+
#validate_find_options(find_options)
|
106
|
+
#set_readonly_option!(find_options)
|
107
|
+
#sql = construct_finder_sql(find_options)
|
108
|
+
|
109
|
+
sql = ActiveRecord::SpawnMethods.apply_finder_options(args.first).to_sql
|
110
|
+
puts sql
|
111
|
+
|
109
112
|
PostgreSQLCursor.new(sql, options) { |r| block_given? ? yield(r) : instantiate(r) }
|
110
113
|
end
|
111
|
-
|
114
|
+
|
112
115
|
# Returns a PostgreSQLCursor instance to access the results of the sql
|
113
116
|
# Specify the :cursor=>{...} option to override options for the cursor such has :buffer_size=>n.
|
114
117
|
# Pass an optional block that takes a Hash of the record and returns what you want to return.
|
@@ -119,3 +122,14 @@ class ActiveRecord::Base
|
|
119
122
|
|
120
123
|
end
|
121
124
|
end
|
125
|
+
|
126
|
+
#Rails 3: add method to use PostgreSQL cursors
|
127
|
+
class ActiveRecord::Relation
|
128
|
+
@@relation_each_row_seq = 0
|
129
|
+
|
130
|
+
def each_row(options={}, &block)
|
131
|
+
@@relation_each_row_seq += 1
|
132
|
+
PostgreSQLCursor.new( to_sql, options).each { |r| block_given? ? yield(r) : instantiate(r) }
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
data/postgresql_cursor.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{postgresql_cursor}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Allen Fair"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-08-06}
|
13
13
|
s.description = %q{PostgreSQL Cursor is an extension to the ActiveRecord PostgreSQLAdapter for very large result sets. It provides a cursor open/fetch/close interface to access data without loading all rows into memory, and instead loads the result rows in "chunks" (default of 10_000 rows), buffers them, and returns the rows one at a time.}
|
14
14
|
s.email = %q{allen.fair@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postgresql_cursor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 1
|
10
|
+
version: 0.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Allen Fair
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-08-06 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|