pg 0.15.0.pre.432-x86-mingw32 → 0.15.0.pre.454-x86-mingw32

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.
@@ -32,7 +32,9 @@ dir_config 'pg'
32
32
  if pgconfig = ( with_config('pg-config') || with_config('pg_config') || find_executable('pg_config') )
33
33
  $stderr.puts "Using config values from %s" % [ pgconfig ]
34
34
  $CPPFLAGS << " -I%s" % [ `"#{pgconfig}" --includedir`.chomp ]
35
- $LDFLAGS << " -L%s" % [ `"#{pgconfig}" --libdir`.chomp ]
35
+
36
+ libdir = `"#{pgconfig}" --libdir`.chomp
37
+ $LDFLAGS << " -L%s -Wl,-rpath,%s" % [ libdir, libdir ]
36
38
  else
37
39
  $stderr.puts "No pg_config... trying anyway. If building fails, please try again with",
38
40
  " --with-pg-config=/path/to/pg_config"
@@ -72,6 +74,7 @@ have_func 'rb_enc_alias'
72
74
  have_func 'rb_thread_call_without_gvl'
73
75
  have_func 'rb_thread_call_with_gvl'
74
76
  have_func 'rb_thread_fd_select'
77
+ have_func 'rb_w32_wrap_io_handle'
75
78
 
76
79
  have_const 'PGRES_COPY_BOTH', 'libpq-fe.h'
77
80
  have_const 'PGRES_SINGLE_TUPLE', 'libpq-fe.h'
@@ -63,6 +63,29 @@ pg_get_pgconn( VALUE self )
63
63
  }
64
64
 
65
65
 
66
+ /*
67
+ * Close the associated socket IO object if there is one.
68
+ */
69
+ void
70
+ pgconn_close_socket_io( VALUE self )
71
+ {
72
+ VALUE socket_io = rb_iv_get( self, "@socket_io" );
73
+ int ruby_sd;
74
+
75
+ if ( RTEST(socket_io) ) {
76
+ #if defined(_WIN32) && defined(HAVE_RB_W32_WRAP_IO_HANDLE)
77
+ ruby_sd = NUM2INT(rb_funcall( socket_io, rb_intern("fileno"), 0 ));
78
+ if( rb_w32_unwrap_io_handle(ruby_sd) ){
79
+ rb_raise(rb_ePGerror, "Could not unwrap win32 socket handle");
80
+ }
81
+ #endif
82
+ rb_funcall( socket_io, rb_intern("close"), 0 );
83
+ }
84
+
85
+ rb_iv_set( self, "@socket_io", Qnil );
86
+ }
87
+
88
+
66
89
  /*
67
90
  * Allocation/
68
91
  */
@@ -388,7 +411,7 @@ pgconn_s_encrypt_password(VALUE self, VALUE password, VALUE username)
388
411
  *
389
412
  * Example:
390
413
  * conn = PG::Connection.connect_start("dbname=mydatabase")
391
- * socket = IO.for_fd(conn.socket)
414
+ * socket = conn.socket_io
392
415
  * status = conn.connect_poll
393
416
  * while(status != PG::PGRES_POLLING_OK) do
394
417
  * # do some work while waiting for the connection to complete
@@ -421,10 +444,11 @@ pgconn_connect_poll(VALUE self)
421
444
  * Closes the backend connection.
422
445
  */
423
446
  static VALUE
424
- pgconn_finish(VALUE self)
447
+ pgconn_finish( VALUE self )
425
448
  {
426
- PQfinish(pg_get_pgconn(self));
427
- DATA_PTR(self) = NULL;
449
+ pgconn_close_socket_io( self );
450
+ PQfinish( pg_get_pgconn(self) );
451
+ DATA_PTR( self ) = NULL;
428
452
  return Qnil;
429
453
  }
430
454
 
@@ -451,9 +475,10 @@ pgconn_finished_p( VALUE self )
451
475
  * backend connection and tries to re-connect.
452
476
  */
453
477
  static VALUE
454
- pgconn_reset(VALUE self)
478
+ pgconn_reset( VALUE self )
455
479
  {
456
- PQreset(pg_get_pgconn(self));
480
+ pgconn_close_socket_io( self );
481
+ PQreset( pg_get_pgconn(self) );
457
482
  return self;
458
483
  }
459
484
 
@@ -470,6 +495,7 @@ pgconn_reset(VALUE self)
470
495
  static VALUE
471
496
  pgconn_reset_start(VALUE self)
472
497
  {
498
+ pgconn_close_socket_io( self );
473
499
  if(PQresetStart(pg_get_pgconn(self)) == 0)
474
500
  rb_raise(rb_ePGerror, "reset has failed");
475
501
  return Qnil;
@@ -715,6 +741,55 @@ pgconn_socket(VALUE self)
715
741
  }
716
742
 
717
743
 
744
+ #if !defined(_WIN32) || defined(HAVE_RB_W32_WRAP_IO_HANDLE)
745
+
746
+ /*
747
+ * call-seq:
748
+ * conn.socket_io() -> IO
749
+ *
750
+ * Fetch a memoized IO object created from the Connection's underlying socket.
751
+ * This object can be used for IO.select to wait for events while running
752
+ * asynchronous API calls.
753
+ *
754
+ * Using this instead of #socket avoids the problem of the underlying connection
755
+ * being closed by Ruby when an IO created using <tt>IO.for_fd(conn.socket)</tt>
756
+ * goes out of scope.
757
+ *
758
+ * This method can also be used on Windows but requires Ruby-2.0+.
759
+ */
760
+ static VALUE
761
+ pgconn_socket_io(VALUE self)
762
+ {
763
+ int sd;
764
+ int ruby_sd;
765
+ int id_autoclose = rb_intern("autoclose=");
766
+ VALUE socket_io = rb_iv_get( self, "@socket_io" );
767
+
768
+ if ( !RTEST(socket_io) ) {
769
+ if( (sd = PQsocket(pg_get_pgconn(self))) < 0)
770
+ rb_raise(rb_ePGerror, "Can't get socket descriptor");
771
+
772
+ #ifdef _WIN32
773
+ ruby_sd = rb_w32_wrap_io_handle((HANDLE)(intptr_t)sd, O_RDWR|O_BINARY|O_NOINHERIT);
774
+ #else
775
+ ruby_sd = sd;
776
+ #endif
777
+
778
+ socket_io = rb_funcall( rb_cIO, rb_intern("for_fd"), 1, INT2NUM(ruby_sd) );
779
+
780
+ /* Disable autoclose feature, when supported */
781
+ if( rb_respond_to(socket_io, id_autoclose) ){
782
+ rb_funcall( socket_io, id_autoclose, 1, Qfalse );
783
+ }
784
+
785
+ rb_iv_set( self, "@socket_io", socket_io );
786
+ }
787
+
788
+ return socket_io;
789
+ }
790
+
791
+ #endif
792
+
718
793
  /*
719
794
  * call-seq:
720
795
  * conn.backend_pid() -> Fixnum
@@ -2174,6 +2249,10 @@ wait_socket_readable( PGconn *conn, struct timeval *ptimeout, void *(*is_readabl
2174
2249
  return NULL;
2175
2250
  } else if ( wait_ret == WAIT_OBJECT_0 ) {
2176
2251
  /* The event we were waiting for. */
2252
+ } else if ( wait_ret == WAIT_OBJECT_0 + 1) {
2253
+ /* This indicates interruption from timer thread, GC, exception
2254
+ * from other threads etc... */
2255
+ rb_thread_check_ints();
2177
2256
  } else if ( wait_ret == WAIT_FAILED ) {
2178
2257
  WSACloseEvent( hEvent );
2179
2258
  rb_raise( rb_ePGerror, "Wait on socket error (WaitForMultipleObjects): %lu", GetLastError() );
@@ -2884,6 +2963,7 @@ pgconn_get_last_result(VALUE self)
2884
2963
  return rb_pgresult;
2885
2964
  }
2886
2965
 
2966
+ #if !defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
2887
2967
 
2888
2968
  /*
2889
2969
  * call-seq:
@@ -2891,10 +2971,14 @@ pgconn_get_last_result(VALUE self)
2891
2971
  * conn.async_exec(sql [, params, result_format ] ) {|pg_result| block }
2892
2972
  *
2893
2973
  * This function has the same behavior as #exec,
2894
- * except that it's implemented using asynchronous command
2895
- * processing and ruby's +rb_thread_select+ in order to
2896
- * allow other threads to process while waiting for the
2897
- * server to complete the request.
2974
+ * but ensures that other threads can process while
2975
+ * waiting for the server to complete the request.
2976
+ *
2977
+ * On Ruby platforms with native threads (MRI-1.9+ and all others)
2978
+ * this method is an alias to #exec.
2979
+ *
2980
+ * On MRI-1.8 it's implemented using asynchronous command
2981
+ * processing and ruby's +rb_thread_select+ .
2898
2982
  */
2899
2983
  static VALUE
2900
2984
  pgconn_async_exec(int argc, VALUE *argv, VALUE self)
@@ -2915,6 +2999,7 @@ pgconn_async_exec(int argc, VALUE *argv, VALUE self)
2915
2999
  return rb_pgresult;
2916
3000
  }
2917
3001
 
3002
+ #endif
2918
3003
 
2919
3004
  /**************************************************************************
2920
3005
  * LARGE OBJECT SUPPORT
@@ -3394,6 +3479,9 @@ init_pg_connection()
3394
3479
  rb_define_method(rb_cPGconn, "server_version", pgconn_server_version, 0);
3395
3480
  rb_define_method(rb_cPGconn, "error_message", pgconn_error_message, 0);
3396
3481
  rb_define_method(rb_cPGconn, "socket", pgconn_socket, 0);
3482
+ #if !defined(_WIN32) || defined(HAVE_RB_W32_WRAP_IO_HANDLE)
3483
+ rb_define_method(rb_cPGconn, "socket_io", pgconn_socket_io, 0);
3484
+ #endif
3397
3485
  rb_define_method(rb_cPGconn, "backend_pid", pgconn_backend_pid, 0);
3398
3486
  rb_define_method(rb_cPGconn, "connection_needs_password", pgconn_connection_needs_password, 0);
3399
3487
  rb_define_method(rb_cPGconn, "connection_used_password", pgconn_connection_used_password, 0);
@@ -3465,7 +3553,11 @@ init_pg_connection()
3465
3553
  rb_define_method(rb_cPGconn, "wait_for_notify", pgconn_wait_for_notify, -1);
3466
3554
  rb_define_alias(rb_cPGconn, "notifies_wait", "wait_for_notify");
3467
3555
  rb_define_method(rb_cPGconn, "quote_ident", pgconn_s_quote_ident, 1);
3556
+ #if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
3557
+ rb_define_alias(rb_cPGconn, "async_exec", "exec");
3558
+ #else
3468
3559
  rb_define_method(rb_cPGconn, "async_exec", pgconn_async_exec, -1);
3560
+ #endif
3469
3561
  rb_define_alias(rb_cPGconn, "async_query", "async_exec");
3470
3562
  rb_define_method(rb_cPGconn, "get_last_result", pgconn_get_last_result, 0);
3471
3563
 
Binary file
Binary file
Binary file
data/lib/pg.rb CHANGED
@@ -19,7 +19,7 @@ end
19
19
  module PG
20
20
 
21
21
  # Library version
22
- VERSION = '0.15.0.pre.432'
22
+ VERSION = '0.15.0.pre.454'
23
23
 
24
24
  # VCS revision
25
25
  REVISION = %q$Revision$
@@ -64,20 +64,6 @@ class PG::Connection
64
64
  class << self
65
65
  define_method( :isthreadsafe, &PG.method(:isthreadsafe) )
66
66
  end
67
-
68
-
69
- ### Fetch a memoized IO object created from the Connection's underlying socket.
70
- ### Using this avoids the problem of the underlying connection being closed by
71
- ### Ruby when an IO created using <tt>IO.for_fd(conn.socket)</tt> goes out of scope.
72
- def socket_io
73
- unless @socket_io
74
- @socket_io = IO.for_fd( self.socket )
75
- @socket_io.autoclose = false if @socket_io.respond_to?( :autoclose= )
76
- end
77
-
78
- return @socket_io
79
- end
80
-
81
67
  end # class PG::Connection
82
68
 
83
69
  # Backward-compatible alias
@@ -181,7 +181,7 @@ module PG::TestingHelpers
181
181
  require 'pg'
182
182
  stop_existing_postmasters()
183
183
 
184
- puts "Setting up test database for #{description} tests"
184
+ puts "Setting up test database for #{description}"
185
185
  @test_pgdata = TEST_DIRECTORY + 'data'
186
186
  @test_pgdata.mkpath
187
187
 
@@ -218,7 +218,7 @@ module PG::TestingHelpers
218
218
 
219
219
  conn = PG.connect( @conninfo )
220
220
  conn.set_notice_processor do |message|
221
- $stderr.puts( message ) if $DEBUG
221
+ $stderr.puts( description + ':' + message ) if $DEBUG
222
222
  end
223
223
 
224
224
  return conn
@@ -227,9 +227,27 @@ module PG::TestingHelpers
227
227
 
228
228
  def teardown_testing_db( conn )
229
229
  puts "Tearing down test database"
230
- conn.finish if conn
230
+
231
+ if conn
232
+ check_for_lingering_connections( conn )
233
+ conn.finish
234
+ end
235
+
231
236
  log_and_run @logfile, 'pg_ctl', '-D', @test_pgdata.to_s, 'stop'
232
237
  end
238
+
239
+
240
+ def check_for_lingering_connections( conn )
241
+ conn.exec( "SELECT * FROM pg_stat_activity" ) do |res|
242
+ conns = res.find_all {|row| row['pid'].to_i != conn.backend_pid }
243
+ unless conns.empty?
244
+ puts "Lingering connections remain:"
245
+ conns.each do |row|
246
+ puts " [%d] {%s} %s -- %s" % row.values_at( 'pid', 'state', 'application_name', 'query' )
247
+ end
248
+ end
249
+ end
250
+ end
233
251
  end
234
252
 
235
253
 
@@ -241,7 +259,13 @@ RSpec.configure do |config|
241
259
 
242
260
  config.mock_with :rspec
243
261
  config.filter_run_excluding :ruby_19 if ruby_version_vec <= [1,9,1].pack( "N*" )
244
- config.filter_run_excluding :unix if RUBY_PLATFORM =~ /mingw|mswin/
262
+ if RUBY_PLATFORM =~ /mingw|mswin/
263
+ config.filter_run_excluding :unix
264
+ else
265
+ config.filter_run_excluding :windows
266
+ end
267
+ config.filter_run_excluding :socket_io unless
268
+ PG::Connection.instance_methods.map( &:to_sym ).include?( :socket_io )
245
269
 
246
270
  config.filter_run_excluding :postgresql_90 unless
247
271
  PG::Connection.instance_methods.map( &:to_sym ).include?( :escape_literal )
@@ -20,11 +20,15 @@ require 'pg'
20
20
  describe PG::Connection do
21
21
 
22
22
  before( :all ) do
23
- @conn = setup_testing_db( "PG_Connection" )
23
+ @conn = setup_testing_db( described_class.name )
24
24
  end
25
25
 
26
26
  before( :each ) do
27
27
  @conn.exec( 'BEGIN' ) unless example.metadata[:without_transaction]
28
+ if PG.respond_to?( :library_version )
29
+ @conn.exec_params %Q{SET application_name TO '%s'} %
30
+ [@conn.escape_string(example.description[0,60])]
31
+ end
28
32
  end
29
33
 
30
34
  after( :each ) do
@@ -123,7 +127,7 @@ describe PG::Connection do
123
127
  }.to raise_error( ArgumentError, /extra positional parameter/i )
124
128
  end
125
129
 
126
- it "can connect asynchronously", :unix do
130
+ it "can connect asynchronously", :socket_io do
127
131
  tmpconn = described_class.connect_start( @conninfo )
128
132
  tmpconn.should be_a( described_class )
129
133
  socket = tmpconn.socket_io
@@ -145,7 +149,7 @@ describe PG::Connection do
145
149
  tmpconn.finish
146
150
  end
147
151
 
148
- it "can connect asynchronously for the duration of a block", :unix do
152
+ it "can connect asynchronously for the duration of a block", :socket_io do
149
153
  conn = nil
150
154
 
151
155
  described_class.connect_start(@conninfo) do |tmpconn|
@@ -212,8 +216,7 @@ describe PG::Connection do
212
216
  From backend> T
213
217
  }.gsub( /^\t{2}/, '' ).lstrip
214
218
 
215
- unless RUBY_PLATFORM =~ /mswin|mingw/
216
- it "trace and untrace client-server communication" do
219
+ it "trace and untrace client-server communication", :unix do
217
220
  # be careful to explicitly close files so that the
218
221
  # directory can be removed and we don't have to wait for
219
222
  # the GC to run.
@@ -242,7 +245,6 @@ describe PG::Connection do
242
245
 
243
246
  trace_data.should == expected_trace_output
244
247
  end
245
- end
246
248
 
247
249
  it "allows a query to be cancelled" do
248
250
  error = false
@@ -255,7 +257,7 @@ describe PG::Connection do
255
257
  error.should == true
256
258
  end
257
259
 
258
- it "automatically rolls back a transaction started with described_class#transaction if an exception " +
260
+ it "automatically rolls back a transaction started with Connection#transaction if an exception " +
259
261
  "is raised" do
260
262
  # abort the per-example transaction so we can test our own
261
263
  @conn.exec( 'ROLLBACK' )
@@ -515,7 +517,7 @@ describe PG::Connection do
515
517
  end
516
518
 
517
519
 
518
- it "can connect asynchronously", :unix do
520
+ it "can connect asynchronously", :socket_io do
519
521
  serv = TCPServer.new( '127.0.0.1', 54320 )
520
522
  conn = described_class.connect_start( '127.0.0.1', 54320, "", "", "me", "xxxx", "somedb" )
521
523
  [PG::PGRES_POLLING_WRITING, PG::CONNECTION_OK].should include conn.connect_poll
@@ -544,6 +546,23 @@ describe PG::Connection do
544
546
  expect { conn.finish }.to raise_error( PG::Error, /connection is closed/i )
545
547
  end
546
548
 
549
+ it "closes the IO fetched from #socket_io when the connection is closed", :without_transaction, :socket_io do
550
+ conn = PG.connect( @conninfo )
551
+ io = conn.socket_io
552
+ conn.finish
553
+ io.should be_closed()
554
+ expect { conn.socket_io }.to raise_error( PG::Error, /connection is closed/i )
555
+ end
556
+
557
+ it "closes the IO fetched from #socket_io when the connection is reset", :without_transaction, :socket_io do
558
+ conn = PG.connect( @conninfo )
559
+ io = conn.socket_io
560
+ conn.reset
561
+ io.should be_closed()
562
+ conn.socket_io.should_not equal( io )
563
+ conn.finish
564
+ end
565
+
547
566
 
548
567
  context "under PostgreSQL 9", :postgresql_90 do
549
568
 
metadata CHANGED
@@ -1,25 +1,47 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg
3
3
  version: !ruby/object:Gem::Version
4
- hash: 2307602505
4
+ hash: -223349668
5
5
  prerelease: 7
6
6
  segments:
7
7
  - 0
8
8
  - 15
9
9
  - 0
10
10
  - pre
11
- - 432
12
- version: 0.15.0.pre.432
11
+ - 454
12
+ version: 0.15.0.pre.454
13
13
  platform: x86-mingw32
14
14
  authors:
15
15
  - Michael Granger
16
16
  autorequire:
17
17
  bindir: bin
18
- cert_chain: []
18
+ cert_chain:
19
+ - |
20
+ -----BEGIN CERTIFICATE-----
21
+ MIIDPDCCAiSgAwIBAgIBADANBgkqhkiG9w0BAQUFADBEMQ0wCwYDVQQDDARsYXJz
22
+ MR8wHQYKCZImiZPyLGQBGRYPZ3JlaXotcmVpbnNkb3JmMRIwEAYKCZImiZPyLGQB
23
+ GRYCZGUwHhcNMTMwMzExMjAyMjIyWhcNMTQwMzExMjAyMjIyWjBEMQ0wCwYDVQQD
24
+ DARsYXJzMR8wHQYKCZImiZPyLGQBGRYPZ3JlaXotcmVpbnNkb3JmMRIwEAYKCZIm
25
+ iZPyLGQBGRYCZGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZb4Uv
26
+ RFJfRu/VEWiy3psh2jinETjiuBrL0NeRFGf8H7iU9+gx/DI/FFhfHGLrDeIskrJx
27
+ YIWDMmEjVO10UUdj7wu4ZhmU++0Cd7Kq9/TyP/shIP3IjqHjVLCnJ3P6f1cl5rxZ
28
+ gqo+d3BAoDrmPk0rtaf6QopwUw9RBiF8V4HqvpiY+ruJotP5UQDP4/lVOKvA8PI9
29
+ P0GmVbFBrbc7Zt5h78N3UyOK0u+nvOC23BvyHXzCtcFsXCoEkt+Wwh0RFqVZdnjM
30
+ LMO2vULHKKHDdX54K/sbVCj9pN9h1aotNzrEyo55zxn0G9PHg/G3P8nMvAXPkUTe
31
+ brhXrfCwWRvOXA4TAgMBAAGjOTA3MAsGA1UdDwQEAwIEsDAJBgNVHRMEAjAAMB0G
32
+ A1UdDgQWBBRAHK81igrXodaDj8a8/BIKsaZrETANBgkqhkiG9w0BAQUFAAOCAQEA
33
+ Iswhcol3ytXthaUH3k5LopZ09viZrZHzAw0QleI3Opl/9QEGJ2BPV9+93iC0OrNL
34
+ hmnxig6vKK1EeJ5PHXJ8hOI3nTZBrOmQcEXNBqyToP1FHMWZqwZ8wiBPXtiCqDBR
35
+ ePQ25J9xFNzQ1ItgzNSpx5cs67QNKrx5woocoBHD6kStFbshZPJx4axl3GbUFQd5
36
+ H//3YdPQOH3jaVeUXhS+pz/gfbx8fhFAtsQ+855A3HO7g2ZRIg/atAp/0MFyn5s5
37
+ 0rq+VHOIPyvxF5khT0mYAcNmZTC8z1yPsqdgwfYNDjsSWwiIRSPUSmJRvfjM8hsW
38
+ mMFp4kPUHbWOqCp2mz9gCA==
39
+ -----END CERTIFICATE-----
19
40
 
20
- date: 2013-02-04 00:00:00 Z
41
+ date: 2013-03-15 00:00:00 Z
21
42
  dependencies:
22
43
  - !ruby/object:Gem::Dependency
44
+ name: hoe-mercurial
23
45
  prerelease: false
24
46
  requirement: &id001 !ruby/object:Gem::Requirement
25
47
  none: false
@@ -33,9 +55,9 @@ dependencies:
33
55
  - 0
34
56
  version: 1.4.0
35
57
  type: :development
36
- name: hoe-mercurial
37
58
  version_requirements: *id001
38
59
  - !ruby/object:Gem::Dependency
60
+ name: hoe-highline
39
61
  prerelease: false
40
62
  requirement: &id002 !ruby/object:Gem::Requirement
41
63
  none: false
@@ -49,9 +71,9 @@ dependencies:
49
71
  - 0
50
72
  version: 0.1.0
51
73
  type: :development
52
- name: hoe-highline
53
74
  version_requirements: *id002
54
75
  - !ruby/object:Gem::Dependency
76
+ name: rdoc
55
77
  prerelease: false
56
78
  requirement: &id003 !ruby/object:Gem::Requirement
57
79
  none: false
@@ -64,52 +86,51 @@ dependencies:
64
86
  - 10
65
87
  version: "3.10"
66
88
  type: :development
67
- name: rdoc
68
89
  version_requirements: *id003
69
90
  - !ruby/object:Gem::Dependency
91
+ name: rake-compiler
70
92
  prerelease: false
71
93
  requirement: &id004 !ruby/object:Gem::Requirement
72
94
  none: false
73
95
  requirements:
74
96
  - - ~>
75
97
  - !ruby/object:Gem::Version
76
- hash: 5
98
+ hash: 27
77
99
  segments:
78
100
  - 0
79
- - 7
80
- version: "0.7"
101
+ - 8
102
+ version: "0.8"
81
103
  type: :development
82
- name: rake-compiler
83
104
  version_requirements: *id004
84
105
  - !ruby/object:Gem::Dependency
106
+ name: hoe-deveiate
85
107
  prerelease: false
86
108
  requirement: &id005 !ruby/object:Gem::Requirement
87
109
  none: false
88
110
  requirements:
89
111
  - - ~>
90
112
  - !ruby/object:Gem::Version
91
- hash: 9
113
+ hash: 15
92
114
  segments:
93
115
  - 0
94
- - 1
95
- version: "0.1"
116
+ - 2
117
+ version: "0.2"
96
118
  type: :development
97
- name: hoe-deveiate
98
119
  version_requirements: *id005
99
120
  - !ruby/object:Gem::Dependency
121
+ name: hoe
100
122
  prerelease: false
101
123
  requirement: &id006 !ruby/object:Gem::Requirement
102
124
  none: false
103
125
  requirements:
104
126
  - - ~>
105
127
  - !ruby/object:Gem::Version
106
- hash: 15
128
+ hash: 7
107
129
  segments:
108
130
  - 3
109
- - 4
110
- version: "3.4"
131
+ - 0
132
+ version: "3.0"
111
133
  type: :development
112
- name: hoe
113
134
  version_requirements: *id006
114
135
  description: |-
115
136
  Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].
@@ -147,9 +168,9 @@ extra_rdoc_files:
147
168
  - README.rdoc
148
169
  - POSTGRES
149
170
  - LICENSE
150
- - ext/gvl_wrappers.c
151
- - ext/pg.c
152
171
  - ext/pg_connection.c
172
+ - ext/pg.c
173
+ - ext/gvl_wrappers.c
153
174
  - ext/pg_result.c
154
175
  files:
155
176
  - .gemtest
@@ -207,6 +228,7 @@ files:
207
228
  - spec/pg_spec.rb
208
229
  - lib/1.8/pg_ext.so
209
230
  - lib/1.9/pg_ext.so
231
+ - lib/2.0/pg_ext.so
210
232
  homepage: https://bitbucket.org/ged/ruby-pg
211
233
  licenses:
212
234
  - BSD
@@ -247,7 +269,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
269
  requirements: []
248
270
 
249
271
  rubyforge_project: pg
250
- rubygems_version: 1.8.24
272
+ rubygems_version: 1.8.17
251
273
  signing_key:
252
274
  specification_version: 3
253
275
  summary: Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/]