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.
@@ -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
- statement_pos = RSpec.configuration.exclusion_filter[:postgresql_90] ? nil : '15'
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
@@ -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.15.1
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-04-08 00:00:00.000000000 Z
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: '3.10'
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: '3.10'
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.3
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