jruby-pg 0.1-java

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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gemtest +0 -0
  3. data/BSDL +22 -0
  4. data/ChangeLog +0 -0
  5. data/Contributors.rdoc +45 -0
  6. data/History.rdoc +270 -0
  7. data/LICENSE +56 -0
  8. data/Manifest.txt +44 -0
  9. data/POSTGRES +23 -0
  10. data/README-OS_X.rdoc +68 -0
  11. data/README-Windows.rdoc +67 -0
  12. data/README.ja.rdoc +14 -0
  13. data/README.rdoc +102 -0
  14. data/Rakefile +211 -0
  15. data/Rakefile.cross +273 -0
  16. data/ext/gvl_wrappers.c +13 -0
  17. data/ext/pg.c +545 -0
  18. data/ext/pg_connection.c +3643 -0
  19. data/ext/pg_errors.c +89 -0
  20. data/ext/pg_result.c +920 -0
  21. data/lib/pg.rb +52 -0
  22. data/lib/pg/connection.rb +179 -0
  23. data/lib/pg/constants.rb +11 -0
  24. data/lib/pg/exceptions.rb +11 -0
  25. data/lib/pg/result.rb +16 -0
  26. data/lib/pg_ext.jar +0 -0
  27. data/sample/array_insert.rb +20 -0
  28. data/sample/async_api.rb +106 -0
  29. data/sample/async_copyto.rb +39 -0
  30. data/sample/async_mixed.rb +56 -0
  31. data/sample/check_conn.rb +21 -0
  32. data/sample/copyfrom.rb +81 -0
  33. data/sample/copyto.rb +19 -0
  34. data/sample/cursor.rb +21 -0
  35. data/sample/disk_usage_report.rb +186 -0
  36. data/sample/issue-119.rb +94 -0
  37. data/sample/losample.rb +69 -0
  38. data/sample/minimal-testcase.rb +17 -0
  39. data/sample/notify_wait.rb +72 -0
  40. data/sample/pg_statistics.rb +294 -0
  41. data/sample/replication_monitor.rb +231 -0
  42. data/sample/test_binary_values.rb +33 -0
  43. data/sample/wal_shipper.rb +434 -0
  44. data/sample/warehouse_partitions.rb +320 -0
  45. data/spec/data/expected_trace.out +26 -0
  46. data/spec/data/random_binary_data +0 -0
  47. data/spec/lib/helpers.rb +350 -0
  48. data/spec/pg/connection_spec.rb +1276 -0
  49. data/spec/pg/result_spec.rb +345 -0
  50. data/spec/pg_spec.rb +44 -0
  51. metadata +190 -0
@@ -0,0 +1,345 @@
1
+ #!/usr/bin/env rspec
2
+ # encoding: utf-8
3
+
4
+ BEGIN {
5
+ require 'pathname'
6
+
7
+ basedir = Pathname( __FILE__ ).dirname.parent.parent
8
+ libdir = basedir + 'lib'
9
+
10
+ $LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
11
+ $LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
12
+ }
13
+
14
+ require 'rspec'
15
+ require 'spec/lib/helpers'
16
+ require 'pg'
17
+
18
+ describe PG::Result do
19
+
20
+ before( :all ) do
21
+ @conn = setup_testing_db( "PG_Result" )
22
+ end
23
+
24
+ before( :each ) do
25
+ @conn.exec( 'BEGIN' )
26
+ end
27
+
28
+ after( :each ) do
29
+ @conn.exec( 'ROLLBACK' )
30
+ end
31
+
32
+ after( :all ) do
33
+ teardown_testing_db( @conn )
34
+ end
35
+
36
+
37
+ #
38
+ # Examples
39
+ #
40
+
41
+ it "should act as an array of hashes" do
42
+ res = @conn.exec("SELECT 1 AS a, 2 AS b")
43
+ res[0]['a'].should== '1'
44
+ res[0]['b'].should== '2'
45
+ end
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
+
54
+ it "should insert nil AS NULL and return NULL as nil" do
55
+ res = @conn.exec("SELECT $1::int AS n", [nil])
56
+ res[0]['n'].should be_nil()
57
+ end
58
+
59
+ it "encapsulates errors in a PGError object" do
60
+ exception = nil
61
+ begin
62
+ @conn.exec( "SELECT * FROM nonexistant_table" )
63
+ rescue PGError => err
64
+ exception = err
65
+ end
66
+
67
+ result = exception.result
68
+
69
+ result.should be_a( described_class() )
70
+ result.error_field( PG::PG_DIAG_SEVERITY ).should == 'ERROR'
71
+ result.error_field( PG::PG_DIAG_SQLSTATE ).should == '42P01'
72
+ result.error_field( PG::PG_DIAG_MESSAGE_PRIMARY ).
73
+ should == 'relation "nonexistant_table" does not exist'
74
+ result.error_field( PG::PG_DIAG_MESSAGE_DETAIL ).should be_nil()
75
+ result.error_field( PG::PG_DIAG_MESSAGE_HINT ).should be_nil()
76
+ result.error_field( PG::PG_DIAG_STATEMENT_POSITION ).should == '15'
77
+ result.error_field( PG::PG_DIAG_INTERNAL_POSITION ).should be_nil()
78
+ result.error_field( PG::PG_DIAG_INTERNAL_QUERY ).should be_nil()
79
+ result.error_field( PG::PG_DIAG_CONTEXT ).should be_nil()
80
+ result.error_field( PG::PG_DIAG_SOURCE_FILE ).should =~ /parse_relation\.c$|namespace\.c$/
81
+ result.error_field( PG::PG_DIAG_SOURCE_LINE ).should =~ /^\d+$/
82
+ result.error_field( PG::PG_DIAG_SOURCE_FUNCTION ).should =~ /^parserOpenTable$|^RangeVarGetRelid$/
83
+ end
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
100
+ end
101
+
102
+ it "should detect division by zero as SQLSTATE 22012" do
103
+ sqlstate = nil
104
+ begin
105
+ res = @conn.exec("SELECT 1/0")
106
+ rescue PGError => e
107
+ sqlstate = e.result.result_error_field( PG::PG_DIAG_SQLSTATE ).to_i
108
+ end
109
+ sqlstate.should == 22012
110
+ end
111
+
112
+ it "should return the same bytes in binary format that are sent in binary format" do
113
+ binary_file = File.join(Dir.pwd, 'spec/data', 'random_binary_data')
114
+ bytes = File.open(binary_file, 'rb').read
115
+ res = @conn.exec('VALUES ($1::bytea)',
116
+ [ { :value => bytes, :format => 1 } ], 1)
117
+ res[0]['column1'].should== bytes
118
+ res.getvalue(0,0).should == bytes
119
+ res.values[0][0].should == bytes
120
+ res.column_values(0)[0].should == bytes
121
+ end
122
+
123
+ it "should return the same bytes in binary format that are sent as inline text" do
124
+ binary_file = File.join(Dir.pwd, 'spec/data', 'random_binary_data')
125
+ bytes = File.open(binary_file, 'rb').read
126
+ @conn.exec("SET standard_conforming_strings=on")
127
+ res = @conn.exec("VALUES ('#{PG::Connection.escape_bytea(bytes)}'::bytea)", [], 1)
128
+ res[0]['column1'].should == bytes
129
+ res.getvalue(0,0).should == bytes
130
+ res.values[0][0].should == bytes
131
+ res.column_values(0)[0].should == bytes
132
+ end
133
+
134
+ it "should return the same bytes in text format that are sent in binary format" do
135
+ binary_file = File.join(Dir.pwd, 'spec/data', 'random_binary_data')
136
+ bytes = File.open(binary_file, 'rb').read
137
+ res = @conn.exec('VALUES ($1::bytea)',
138
+ [ { :value => bytes, :format => 1 } ])
139
+ PG::Connection.unescape_bytea(res[0]['column1']).should== bytes
140
+ end
141
+
142
+ it "should return the same bytes in text format that are sent as inline text" do
143
+ binary_file = File.join(Dir.pwd, 'spec/data', 'random_binary_data')
144
+ in_bytes = File.open(binary_file, 'rb').read
145
+
146
+ out_bytes = nil
147
+ @conn.exec("SET standard_conforming_strings=on")
148
+ res = @conn.exec("VALUES ('#{PG::Connection.escape_bytea(in_bytes)}'::bytea)", [], 0)
149
+ out_bytes = PG::Connection.unescape_bytea(res[0]['column1'])
150
+ out_bytes.should == in_bytes
151
+ end
152
+
153
+ it "should return the parameter type of the specified prepared statement parameter", :postgresql_92 do
154
+ query = 'SELECT * FROM pg_stat_activity WHERE user = $1::name AND query = $2::text'
155
+ @conn.prepare( 'queryfinder', query )
156
+ res = @conn.describe_prepared( 'queryfinder' )
157
+
158
+ @conn.exec( 'SELECT format_type($1, -1)', [res.paramtype(0)] ).getvalue( 0, 0 ).
159
+ should == 'name'
160
+ @conn.exec( 'SELECT format_type($1, -1)', [res.paramtype(1)] ).getvalue( 0, 0 ).
161
+ should == 'text'
162
+ end
163
+
164
+ it "should raise an exception when a negative index is given to #fformat" do
165
+ res = @conn.exec('SELECT * FROM pg_stat_activity')
166
+ expect {
167
+ res.fformat( -1 )
168
+ }.to raise_error( ArgumentError, /column number/i )
169
+ end
170
+
171
+ it "should raise an exception when a negative index is given to #fmod" do
172
+ res = @conn.exec('SELECT * FROM pg_stat_activity')
173
+ expect {
174
+ res.fmod( -1 )
175
+ }.to raise_error( ArgumentError, /column number/i )
176
+ end
177
+
178
+ it "should raise an exception when a negative index is given to #[]" do
179
+ res = @conn.exec('SELECT * FROM pg_stat_activity')
180
+ expect {
181
+ res[ -1 ]
182
+ }.to raise_error( IndexError, /-1 is out of range/i )
183
+ end
184
+
185
+ it "should raise allow for conversion to an array of arrays" do
186
+ @conn.exec( 'CREATE TABLE valuestest ( foo varchar(33) )' )
187
+ @conn.exec( 'INSERT INTO valuestest ("foo") values (\'bar\')' )
188
+ @conn.exec( 'INSERT INTO valuestest ("foo") values (\'bar2\')' )
189
+
190
+ res = @conn.exec( 'SELECT * FROM valuestest' )
191
+ res.values.should == [ ["bar"], ["bar2"] ]
192
+ end
193
+
194
+ # PQfmod
195
+ it "can return the type modifier for a result column" do
196
+ @conn.exec( 'CREATE TABLE fmodtest ( foo varchar(33) )' )
197
+ res = @conn.exec( 'SELECT * FROM fmodtest' )
198
+ res.fmod( 0 ).should == 33 + 4 # Column length + varlena size (4)
199
+ end
200
+
201
+ it "should raise an exception when an invalid index is passed to PG::Result#fmod" do
202
+ @conn.exec( 'CREATE TABLE fmodtest ( foo varchar(33) )' )
203
+ res = @conn.exec( 'SELECT * FROM fmodtest' )
204
+ expect { res.fmod(1) }.to raise_error( ArgumentError )
205
+ end
206
+
207
+ it "should raise an exception when an invalid (negative) index is passed to PG::Result#fmod" do
208
+ @conn.exec( 'CREATE TABLE fmodtest ( foo varchar(33) )' )
209
+ res = @conn.exec( 'SELECT * FROM fmodtest' )
210
+ expect { res.fmod(-11) }.to raise_error( ArgumentError )
211
+ end
212
+
213
+ it "shouldn't raise an exception when a valid index is passed to PG::Result#fmod for a column with no typemod" do
214
+ @conn.exec( 'CREATE TABLE fmodtest ( foo text )' )
215
+ res = @conn.exec( 'SELECT * FROM fmodtest' )
216
+ res.fmod( 0 ).should == -1 # and it shouldn't raise an exception, either
217
+ end
218
+
219
+ # PQftable
220
+ it "can return the oid of the table from which a result column was fetched" do
221
+ @conn.exec( 'CREATE TABLE ftabletest ( foo text )' )
222
+ res = @conn.exec( 'SELECT * FROM ftabletest' )
223
+
224
+ res.ftable( 0 ).should == be_nonzero()
225
+ end
226
+
227
+ it "should raise an exception when an invalid index is passed to PG::Result#ftable" do
228
+ @conn.exec( 'CREATE TABLE ftabletest ( foo text )' )
229
+ res = @conn.exec( 'SELECT * FROM ftabletest' )
230
+
231
+ expect { res.ftable(18) }.to raise_error( ArgumentError )
232
+ end
233
+
234
+ it "should raise an exception when an invalid (negative) index is passed to PG::Result#ftable" do
235
+ @conn.exec( 'CREATE TABLE ftabletest ( foo text )' )
236
+ res = @conn.exec( 'SELECT * FROM ftabletest' )
237
+
238
+ expect { res.ftable(-2) }.to raise_error( ArgumentError )
239
+ end
240
+
241
+ it "shouldn't raise an exception when a valid index is passed to PG::Result#ftable for a " +
242
+ "column with no corresponding table" do
243
+ @conn.exec( 'CREATE TABLE ftabletest ( foo text )' )
244
+ res = @conn.exec( 'SELECT foo, LENGTH(foo) as length FROM ftabletest' )
245
+ res.ftable( 1 ).should == PG::INVALID_OID # and it shouldn't raise an exception, either
246
+ end
247
+
248
+ # PQftablecol
249
+ it "can return the column number (within its table) of a column in a result" do
250
+ @conn.exec( 'CREATE TABLE ftablecoltest ( foo text, bar numeric )' )
251
+ res = @conn.exec( 'SELECT * FROM ftablecoltest' )
252
+
253
+ res.ftablecol( 0 ).should == 1
254
+ res.ftablecol( 1 ).should == 2
255
+ end
256
+
257
+ it "should raise an exception when an invalid index is passed to PG::Result#ftablecol" do
258
+ @conn.exec( 'CREATE TABLE ftablecoltest ( foo text, bar numeric )' )
259
+ res = @conn.exec( 'SELECT * FROM ftablecoltest' )
260
+
261
+ expect { res.ftablecol(32) }.to raise_error( ArgumentError )
262
+ end
263
+
264
+ it "should raise an exception when an invalid (negative) index is passed to PG::Result#ftablecol" do
265
+ @conn.exec( 'CREATE TABLE ftablecoltest ( foo text, bar numeric )' )
266
+ res = @conn.exec( 'SELECT * FROM ftablecoltest' )
267
+
268
+ expect { res.ftablecol(-1) }.to raise_error( ArgumentError )
269
+ end
270
+
271
+ it "shouldn't raise an exception when a valid index is passed to PG::Result#ftablecol for a " +
272
+ "column with no corresponding table" do
273
+ @conn.exec( 'CREATE TABLE ftablecoltest ( foo text )' )
274
+ res = @conn.exec( 'SELECT foo, LENGTH(foo) as length FROM ftablecoltest' )
275
+ res.ftablecol(1).should == 0 # and it shouldn't raise an exception, either
276
+ end
277
+
278
+ it "can be manually checked for failed result status (async API)" do
279
+ @conn.send_query( "SELECT * FROM nonexistant_table" )
280
+ res = @conn.get_result
281
+ expect {
282
+ res.check
283
+ }.to raise_error( PG::Error, /relation "nonexistant_table" does not exist/ )
284
+ end
285
+
286
+ it "can return the values of a single field" do
287
+ res = @conn.exec( "SELECT 1 AS x, 'a' AS y UNION ALL SELECT 2, 'b'" )
288
+ res.field_values( 'x' ).should == ['1', '2']
289
+ res.field_values( 'y' ).should == ['a', 'b']
290
+ expect{ res.field_values( '' ) }.to raise_error(IndexError)
291
+ expect{ res.field_values( :x ) }.to raise_error(TypeError)
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
345
+ end
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env rspec
2
+ # encoding: utf-8
3
+
4
+ BEGIN {
5
+ require 'pathname'
6
+
7
+ basedir = Pathname( __FILE__ ).dirname.parent
8
+ libdir = basedir + 'lib'
9
+
10
+ $LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
11
+ $LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
12
+ }
13
+
14
+ require 'rspec'
15
+ require 'spec/lib/helpers'
16
+ require 'pg'
17
+
18
+ describe PG do
19
+
20
+ it "knows what version of the libpq library is loaded", :postgresql_91 do
21
+ PG.library_version.should be_an( Integer )
22
+ PG.library_version.should >= 90100
23
+ end
24
+
25
+
26
+ it "knows whether or not the library is threadsafe" do
27
+ PG.should be_threadsafe()
28
+ end
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
+
43
+ end
44
+
metadata ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jruby-pg
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: java
6
+ authors:
7
+ - Charles Nutter
8
+ - John Shahid
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2017-05-09 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.9'
20
+ name: rake-compiler
21
+ prerelease: false
22
+ type: :development
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '0.9'
28
+ - !ruby/object:Gem::Dependency
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 3.5.1
34
+ name: hoe
35
+ prerelease: false
36
+ type: :development
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 3.5.1
42
+ - !ruby/object:Gem::Dependency
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.2'
48
+ name: hoe-deveiate
49
+ prerelease: false
50
+ type: :development
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '0.2'
56
+ - !ruby/object:Gem::Dependency
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ name: hoe-bundler
63
+ prerelease: false
64
+ type: :development
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.0'
70
+ - !ruby/object:Gem::Dependency
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.0'
76
+ name: rdoc
77
+ prerelease: false
78
+ type: :development
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '4.0'
84
+ description: |-
85
+ This file needs a translation of the English README. Pull requests, patches, or
86
+ volunteers gladly accepted.
87
+
88
+ Until such time, please accept my sincere apologies for not knowing Japanese.
89
+ email:
90
+ - headius@headius.com
91
+ - jvshahid@gmail.com
92
+ executables: []
93
+ extensions: []
94
+ extra_rdoc_files:
95
+ - Contributors.rdoc
96
+ - History.rdoc
97
+ - Manifest.txt
98
+ - README-OS_X.rdoc
99
+ - README-Windows.rdoc
100
+ - README.ja.rdoc
101
+ - README.rdoc
102
+ - POSTGRES
103
+ - LICENSE
104
+ - ext/gvl_wrappers.c
105
+ - ext/pg.c
106
+ - ext/pg_connection.c
107
+ - ext/pg_errors.c
108
+ - ext/pg_result.c
109
+ files:
110
+ - ".gemtest"
111
+ - BSDL
112
+ - ChangeLog
113
+ - Contributors.rdoc
114
+ - History.rdoc
115
+ - LICENSE
116
+ - Manifest.txt
117
+ - POSTGRES
118
+ - README-OS_X.rdoc
119
+ - README-Windows.rdoc
120
+ - README.ja.rdoc
121
+ - README.rdoc
122
+ - Rakefile
123
+ - Rakefile.cross
124
+ - ext/gvl_wrappers.c
125
+ - ext/pg.c
126
+ - ext/pg_connection.c
127
+ - ext/pg_errors.c
128
+ - ext/pg_result.c
129
+ - lib/pg.rb
130
+ - lib/pg/connection.rb
131
+ - lib/pg/constants.rb
132
+ - lib/pg/exceptions.rb
133
+ - lib/pg/result.rb
134
+ - lib/pg_ext.jar
135
+ - sample/array_insert.rb
136
+ - sample/async_api.rb
137
+ - sample/async_copyto.rb
138
+ - sample/async_mixed.rb
139
+ - sample/check_conn.rb
140
+ - sample/copyfrom.rb
141
+ - sample/copyto.rb
142
+ - sample/cursor.rb
143
+ - sample/disk_usage_report.rb
144
+ - sample/issue-119.rb
145
+ - sample/losample.rb
146
+ - sample/minimal-testcase.rb
147
+ - sample/notify_wait.rb
148
+ - sample/pg_statistics.rb
149
+ - sample/replication_monitor.rb
150
+ - sample/test_binary_values.rb
151
+ - sample/wal_shipper.rb
152
+ - sample/warehouse_partitions.rb
153
+ - spec/data/expected_trace.out
154
+ - spec/data/random_binary_data
155
+ - spec/lib/helpers.rb
156
+ - spec/pg/connection_spec.rb
157
+ - spec/pg/result_spec.rb
158
+ - spec/pg_spec.rb
159
+ homepage: https://bitbucket.org/ged/ruby-pg
160
+ licenses:
161
+ - BSD-2-Clause
162
+ - Ruby
163
+ metadata: {}
164
+ post_install_message:
165
+ rdoc_options:
166
+ - "-f"
167
+ - fivefish
168
+ - "-t"
169
+ - 'pg: The Ruby Interface to PostgreSQL'
170
+ - "-m"
171
+ - README.rdoc
172
+ require_paths:
173
+ - lib
174
+ required_ruby_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: 1.8.7
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ requirements: []
185
+ rubyforge_project:
186
+ rubygems_version: 2.6.11
187
+ signing_key:
188
+ specification_version: 4
189
+ summary: This file needs a translation of the English README
190
+ test_files: []