pg 0.14.1 → 0.15.0.pre.432
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.tar.gz.sig +0 -0
- data/ChangeLog +425 -2
- data/Contributors.rdoc +1 -1
- data/History.rdoc +35 -0
- data/Manifest.txt +3 -0
- data/README.rdoc +5 -3
- data/Rakefile.cross +2 -2
- data/ext/extconf.rb +7 -1
- data/ext/gvl_wrappers.c +13 -0
- data/ext/gvl_wrappers.h +185 -0
- data/ext/pg.c +9 -5
- data/ext/pg.h +3 -0
- data/ext/pg_connection.c +452 -351
- data/ext/pg_result.c +9 -12
- data/lib/pg.rb +1 -1
- data/lib/pg/connection.rb +22 -2
- data/lib/pg/result.rb +6 -1
- data/sample/array_insert.rb +20 -0
- data/sample/async_api.rb +1 -1
- data/sample/async_copyto.rb +1 -1
- data/sample/async_mixed.rb +1 -1
- data/spec/lib/helpers.rb +16 -10
- data/spec/pg/connection_spec.rb +212 -108
- data/spec/pg/result_spec.rb +23 -8
- metadata +11 -7
- metadata.gz.sig +0 -0
data/spec/pg/result_spec.rb
CHANGED
@@ -44,6 +44,13 @@ describe PG::Result do
|
|
44
44
|
res[0]['b'].should== '2'
|
45
45
|
end
|
46
46
|
|
47
|
+
it "should yield a row as an array" do
|
48
|
+
res = @conn.exec("SELECT 1 AS a, 2 AS b")
|
49
|
+
list = []
|
50
|
+
res.each_row { |r| list << r }
|
51
|
+
list.should eq [['1', '2']]
|
52
|
+
end
|
53
|
+
|
47
54
|
it "should insert nil AS NULL and return NULL as nil" do
|
48
55
|
res = @conn.exec("SELECT $1::int AS n", [nil])
|
49
56
|
res[0]['n'].should be_nil()
|
@@ -66,13 +73,14 @@ describe PG::Result do
|
|
66
73
|
should == 'relation "nonexistant_table" does not exist'
|
67
74
|
result.error_field( PG::PG_DIAG_MESSAGE_DETAIL ).should be_nil()
|
68
75
|
result.error_field( PG::PG_DIAG_MESSAGE_HINT ).should be_nil()
|
69
|
-
|
76
|
+
statement_pos = RSpec.configuration.exclusion_filter[:postgresql_90] ? nil : '15'
|
77
|
+
result.error_field( PG::PG_DIAG_STATEMENT_POSITION ).should == statement_pos
|
70
78
|
result.error_field( PG::PG_DIAG_INTERNAL_POSITION ).should be_nil()
|
71
79
|
result.error_field( PG::PG_DIAG_INTERNAL_QUERY ).should be_nil()
|
72
80
|
result.error_field( PG::PG_DIAG_CONTEXT ).should be_nil()
|
73
|
-
result.error_field( PG::PG_DIAG_SOURCE_FILE ).should =~ /parse_relation\.c$/
|
74
|
-
result.error_field( PG::PG_DIAG_SOURCE_LINE ).should
|
75
|
-
result.error_field( PG::PG_DIAG_SOURCE_FUNCTION ).should
|
81
|
+
result.error_field( PG::PG_DIAG_SOURCE_FILE ).should =~ /parse_relation\.c$|namespace\.c$/
|
82
|
+
result.error_field( PG::PG_DIAG_SOURCE_LINE ).should =~ /^\d+$/
|
83
|
+
result.error_field( PG::PG_DIAG_SOURCE_FUNCTION ).should =~ /^parserOpenTable$|^RangeVarGetRelid$/
|
76
84
|
|
77
85
|
end
|
78
86
|
|
@@ -89,7 +97,7 @@ describe PG::Result do
|
|
89
97
|
it "should return the same bytes in binary format that are sent in binary format" do
|
90
98
|
binary_file = File.join(Dir.pwd, 'spec/data', 'random_binary_data')
|
91
99
|
bytes = File.open(binary_file, 'rb').read
|
92
|
-
res = @conn.exec('VALUES ($1::bytea)',
|
100
|
+
res = @conn.exec('VALUES ($1::bytea)',
|
93
101
|
[ { :value => bytes, :format => 1 } ], 1)
|
94
102
|
res[0]['column1'].should== bytes
|
95
103
|
res.getvalue(0,0).should == bytes
|
@@ -111,7 +119,7 @@ describe PG::Result do
|
|
111
119
|
it "should return the same bytes in text format that are sent in binary format" do
|
112
120
|
binary_file = File.join(Dir.pwd, 'spec/data', 'random_binary_data')
|
113
121
|
bytes = File.open(binary_file, 'rb').read
|
114
|
-
res = @conn.exec('VALUES ($1::bytea)',
|
122
|
+
res = @conn.exec('VALUES ($1::bytea)',
|
115
123
|
[ { :value => bytes, :format => 1 } ])
|
116
124
|
PG::Connection.unescape_bytea(res[0]['column1']).should== bytes
|
117
125
|
end
|
@@ -127,8 +135,8 @@ describe PG::Result do
|
|
127
135
|
out_bytes.should == in_bytes
|
128
136
|
end
|
129
137
|
|
130
|
-
it "should return the parameter type of the specified prepared statement parameter" do
|
131
|
-
query = 'SELECT * FROM pg_stat_activity WHERE user = $1::name AND
|
138
|
+
it "should return the parameter type of the specified prepared statement parameter", :postgresql_92 do
|
139
|
+
query = 'SELECT * FROM pg_stat_activity WHERE user = $1::name AND query = $2::text'
|
132
140
|
@conn.prepare( 'queryfinder', query )
|
133
141
|
res = @conn.describe_prepared( 'queryfinder' )
|
134
142
|
|
@@ -260,4 +268,11 @@ describe PG::Result do
|
|
260
268
|
}.to raise_error( PG::Error, /relation "nonexistant_table" does not exist/ )
|
261
269
|
end
|
262
270
|
|
271
|
+
it "can return the values of a single field" do
|
272
|
+
res = @conn.exec( "SELECT 1 AS x, 'a' AS y UNION ALL SELECT 2, 'b'" )
|
273
|
+
res.field_values( 'x' ).should == ['1', '2']
|
274
|
+
res.field_values( 'y' ).should == ['a', 'b']
|
275
|
+
expect{ res.field_values( '' ) }.to raise_error(IndexError)
|
276
|
+
expect{ res.field_values( :x ) }.to raise_error(TypeError)
|
277
|
+
end
|
263
278
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0.pre.432
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -36,7 +36,7 @@ cert_chain:
|
|
36
36
|
YUhDS0xaZFNLai9SSHVUT3QrZ2JsUmV4OEZBaDhOZUEKY21saFhlNDZwWk5K
|
37
37
|
Z1dLYnhaYWg4NWpJang5NWhSOHZPSStOQU01aUg5a09xSzEzRHJ4YWNUS1Bo
|
38
38
|
cWo1UGp3RgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
|
39
|
-
date:
|
39
|
+
date: 2013-02-03 00:00:00.000000000 Z
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: hoe-mercurial
|
@@ -125,7 +125,7 @@ dependencies:
|
|
125
125
|
requirements:
|
126
126
|
- - ~>
|
127
127
|
- !ruby/object:Gem::Version
|
128
|
-
version: '3.
|
128
|
+
version: '3.4'
|
129
129
|
type: :development
|
130
130
|
prerelease: false
|
131
131
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -133,13 +133,13 @@ dependencies:
|
|
133
133
|
requirements:
|
134
134
|
- - ~>
|
135
135
|
- !ruby/object:Gem::Version
|
136
|
-
version: '3.
|
136
|
+
version: '3.4'
|
137
137
|
description: ! "Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].\n\nIt
|
138
138
|
works with {PostgreSQL 8.3 and later}[http://bit.ly/6AfPhm].\n\nA small example
|
139
|
-
usage:\n\n #!/usr/bin/env ruby\n
|
139
|
+
usage:\n\n #!/usr/bin/env ruby\n\n require 'pg'\n\n # Output a table of current
|
140
140
|
connections to the DB\n conn = PG.connect( dbname: 'sales' )\n conn.exec( \"SELECT
|
141
141
|
* FROM pg_stat_activity\" ) do |result|\n puts \" PID | User |
|
142
|
-
Query\"\n
|
142
|
+
Query\"\n result.each do |row|\n puts \" %7d | %-16s | %s \" %\n row.values_at('procpid',
|
143
143
|
'usename', 'current_query')\n end\n end"
|
144
144
|
email:
|
145
145
|
- ged@FaerieMUD.org
|
@@ -156,6 +156,7 @@ extra_rdoc_files:
|
|
156
156
|
- README.rdoc
|
157
157
|
- POSTGRES
|
158
158
|
- LICENSE
|
159
|
+
- ext/gvl_wrappers.c
|
159
160
|
- ext/pg.c
|
160
161
|
- ext/pg_connection.c
|
161
162
|
- ext/pg_result.c
|
@@ -175,6 +176,8 @@ files:
|
|
175
176
|
- Rakefile
|
176
177
|
- Rakefile.cross
|
177
178
|
- ext/extconf.rb
|
179
|
+
- ext/gvl_wrappers.c
|
180
|
+
- ext/gvl_wrappers.h
|
178
181
|
- ext/pg.c
|
179
182
|
- ext/pg.h
|
180
183
|
- ext/pg_connection.c
|
@@ -187,6 +190,7 @@ files:
|
|
187
190
|
- lib/pg/constants.rb
|
188
191
|
- lib/pg/exceptions.rb
|
189
192
|
- lib/pg/result.rb
|
193
|
+
- sample/array_insert.rb
|
190
194
|
- sample/async_api.rb
|
191
195
|
- sample/async_copyto.rb
|
192
196
|
- sample/async_mixed.rb
|
@@ -239,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
239
243
|
version: '0'
|
240
244
|
requirements: []
|
241
245
|
rubyforge_project: pg
|
242
|
-
rubygems_version: 1.8.
|
246
|
+
rubygems_version: 1.8.25
|
243
247
|
signing_key:
|
244
248
|
specification_version: 3
|
245
249
|
summary: Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/]
|
metadata.gz.sig
CHANGED
Binary file
|