pg 0.15.1 → 0.16.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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +1 -3
- data/ChangeLog +361 -59
- data/History.rdoc +31 -4
- data/Manifest.txt +4 -0
- data/Rakefile +30 -10
- data/ext/errorcodes.def +931 -0
- data/ext/errorcodes.rb +45 -0
- data/ext/errorcodes.txt +463 -0
- data/ext/extconf.rb +11 -5
- data/ext/gvl_wrappers.c +6 -0
- data/ext/gvl_wrappers.h +47 -21
- data/ext/pg.c +30 -10
- data/ext/pg.h +30 -0
- data/ext/pg_connection.c +105 -45
- data/ext/pg_errors.c +89 -0
- data/ext/pg_result.c +49 -68
- data/lib/pg.rb +2 -2
- data/spec/lib/helpers.rb +11 -2
- data/spec/pg/connection_spec.rb +113 -8
- data/spec/pg/result_spec.rb +69 -2
- data/spec/pg_spec.rb +13 -0
- metadata +11 -5
- metadata.gz.sig +0 -0
data/spec/pg/result_spec.rb
CHANGED
@@ -73,15 +73,30 @@ describe PG::Result do
|
|
73
73
|
should == 'relation "nonexistant_table" does not exist'
|
74
74
|
result.error_field( PG::PG_DIAG_MESSAGE_DETAIL ).should be_nil()
|
75
75
|
result.error_field( PG::PG_DIAG_MESSAGE_HINT ).should be_nil()
|
76
|
-
|
77
|
-
result.error_field( PG::PG_DIAG_STATEMENT_POSITION ).should == statement_pos
|
76
|
+
result.error_field( PG::PG_DIAG_STATEMENT_POSITION ).should == '15'
|
78
77
|
result.error_field( PG::PG_DIAG_INTERNAL_POSITION ).should be_nil()
|
79
78
|
result.error_field( PG::PG_DIAG_INTERNAL_QUERY ).should be_nil()
|
80
79
|
result.error_field( PG::PG_DIAG_CONTEXT ).should be_nil()
|
81
80
|
result.error_field( PG::PG_DIAG_SOURCE_FILE ).should =~ /parse_relation\.c$|namespace\.c$/
|
82
81
|
result.error_field( PG::PG_DIAG_SOURCE_LINE ).should =~ /^\d+$/
|
83
82
|
result.error_field( PG::PG_DIAG_SOURCE_FUNCTION ).should =~ /^parserOpenTable$|^RangeVarGetRelid$/
|
83
|
+
end
|
84
84
|
|
85
|
+
it "encapsulates database object names for integrity constraint violations", :postgresql_93 do
|
86
|
+
@conn.exec( "CREATE TABLE integrity (id SERIAL PRIMARY KEY)" )
|
87
|
+
exception = nil
|
88
|
+
begin
|
89
|
+
@conn.exec( "INSERT INTO integrity VALUES (NULL)" )
|
90
|
+
rescue PGError => err
|
91
|
+
exception = err
|
92
|
+
end
|
93
|
+
result = exception.result
|
94
|
+
|
95
|
+
result.error_field( PG::PG_DIAG_SCHEMA_NAME ).should == 'public'
|
96
|
+
result.error_field( PG::PG_DIAG_TABLE_NAME ).should == 'integrity'
|
97
|
+
result.error_field( PG::PG_DIAG_COLUMN_NAME ).should == 'id'
|
98
|
+
result.error_field( PG::PG_DIAG_DATATYPE_NAME ).should be_nil
|
99
|
+
result.error_field( PG::PG_DIAG_CONSTRAINT_NAME ).should be_nil
|
85
100
|
end
|
86
101
|
|
87
102
|
it "should detect division by zero as SQLSTATE 22012" do
|
@@ -275,4 +290,56 @@ describe PG::Result do
|
|
275
290
|
expect{ res.field_values( '' ) }.to raise_error(IndexError)
|
276
291
|
expect{ res.field_values( :x ) }.to raise_error(TypeError)
|
277
292
|
end
|
293
|
+
|
294
|
+
it "should raise a proper exception for a nonexistant table" do
|
295
|
+
expect {
|
296
|
+
@conn.exec( "SELECT * FROM nonexistant_table" )
|
297
|
+
}.to raise_error( PG::UndefinedTable, /relation "nonexistant_table" does not exist/ )
|
298
|
+
end
|
299
|
+
|
300
|
+
it "should raise a more generic exception for an unknown SQLSTATE" do
|
301
|
+
old_error = PG::ERROR_CLASSES.delete('42P01')
|
302
|
+
begin
|
303
|
+
expect {
|
304
|
+
@conn.exec( "SELECT * FROM nonexistant_table" )
|
305
|
+
}.to raise_error{|error|
|
306
|
+
error.should be_an_instance_of(PG::SyntaxErrorOrAccessRuleViolation)
|
307
|
+
error.to_s.should match(/relation "nonexistant_table" does not exist/)
|
308
|
+
}
|
309
|
+
ensure
|
310
|
+
PG::ERROR_CLASSES['42P01'] = old_error
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
it "should raise a ServerError for an unknown SQLSTATE class" do
|
315
|
+
old_error1 = PG::ERROR_CLASSES.delete('42P01')
|
316
|
+
old_error2 = PG::ERROR_CLASSES.delete('42')
|
317
|
+
begin
|
318
|
+
expect {
|
319
|
+
@conn.exec( "SELECT * FROM nonexistant_table" )
|
320
|
+
}.to raise_error{|error|
|
321
|
+
error.should be_an_instance_of(PG::ServerError)
|
322
|
+
error.to_s.should match(/relation "nonexistant_table" does not exist/)
|
323
|
+
}
|
324
|
+
ensure
|
325
|
+
PG::ERROR_CLASSES['42P01'] = old_error1
|
326
|
+
PG::ERROR_CLASSES['42'] = old_error2
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
it "should raise a proper exception for a nonexistant schema" do
|
331
|
+
expect {
|
332
|
+
@conn.exec( "DROP SCHEMA nonexistant_schema" )
|
333
|
+
}.to raise_error( PG::InvalidSchemaName, /schema "nonexistant_schema" does not exist/ )
|
334
|
+
end
|
335
|
+
|
336
|
+
it "the raised result should be nil in case of a connection error" do
|
337
|
+
c = PGconn.connect_start( '127.0.0.1', 54320, "", "", "me", "xxxx", "somedb" )
|
338
|
+
expect {
|
339
|
+
c.exec "select 1"
|
340
|
+
}.to raise_error{|error|
|
341
|
+
error.should be_an_instance_of(PG::UnableToSend)
|
342
|
+
error.result.should == nil
|
343
|
+
}
|
344
|
+
end
|
278
345
|
end
|
data/spec/pg_spec.rb
CHANGED
@@ -27,5 +27,18 @@ describe PG do
|
|
27
27
|
PG.should be_threadsafe()
|
28
28
|
end
|
29
29
|
|
30
|
+
it "does have hierarchical error classes" do
|
31
|
+
PG::UndefinedTable.ancestors[0,4].should == [
|
32
|
+
PG::UndefinedTable,
|
33
|
+
PG::SyntaxErrorOrAccessRuleViolation,
|
34
|
+
PG::ServerError,
|
35
|
+
PG::Error]
|
36
|
+
|
37
|
+
PG::InvalidSchemaName.ancestors[0,3].should == [
|
38
|
+
PG::InvalidSchemaName,
|
39
|
+
PG::ServerError,
|
40
|
+
PG::Error]
|
41
|
+
end
|
42
|
+
|
30
43
|
end
|
31
44
|
|
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.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
6mKCwjpegytE0oifXfF8k75A9105cBnNiMZOe1tXiqYc/exCgWvbggurzDOcRkZu
|
31
31
|
/YSusaiDXHKU2O3Akc3htA==
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2013-
|
33
|
+
date: 2013-07-23 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: hoe-mercurial
|
@@ -66,14 +66,14 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '4.0'
|
70
70
|
type: :development
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: '
|
76
|
+
version: '4.0'
|
77
77
|
- !ruby/object:Gem::Dependency
|
78
78
|
name: rake-compiler
|
79
79
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,11 +149,13 @@ extra_rdoc_files:
|
|
149
149
|
- README-Windows.rdoc
|
150
150
|
- README.ja.rdoc
|
151
151
|
- README.rdoc
|
152
|
+
- ext/errorcodes.txt
|
152
153
|
- POSTGRES
|
153
154
|
- LICENSE
|
154
155
|
- ext/gvl_wrappers.c
|
155
156
|
- ext/pg.c
|
156
157
|
- ext/pg_connection.c
|
158
|
+
- ext/pg_errors.c
|
157
159
|
- ext/pg_result.c
|
158
160
|
files:
|
159
161
|
- .gemtest
|
@@ -170,12 +172,16 @@ files:
|
|
170
172
|
- README.rdoc
|
171
173
|
- Rakefile
|
172
174
|
- Rakefile.cross
|
175
|
+
- ext/errorcodes.def
|
176
|
+
- ext/errorcodes.rb
|
177
|
+
- ext/errorcodes.txt
|
173
178
|
- ext/extconf.rb
|
174
179
|
- ext/gvl_wrappers.c
|
175
180
|
- ext/gvl_wrappers.h
|
176
181
|
- ext/pg.c
|
177
182
|
- ext/pg.h
|
178
183
|
- ext/pg_connection.c
|
184
|
+
- ext/pg_errors.c
|
179
185
|
- ext/pg_result.c
|
180
186
|
- ext/vc/pg.sln
|
181
187
|
- ext/vc/pg_18/pg.vcproj
|
@@ -237,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
237
243
|
version: '0'
|
238
244
|
requirements: []
|
239
245
|
rubyforge_project: pg
|
240
|
-
rubygems_version: 2.0.
|
246
|
+
rubygems_version: 2.0.5
|
241
247
|
signing_key:
|
242
248
|
specification_version: 4
|
243
249
|
summary: Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/]
|
metadata.gz.sig
CHANGED
Binary file
|