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

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