jruby-pg 0.1-java

Sign up to get free protection for your applications and to get access to all the features.
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: []