pg 1.3.0.rc1-x86-mingw32 → 1.3.0.rc2-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.
data/ext/pg_connection.c CHANGED
@@ -249,68 +249,13 @@ pgconn_s_allocate( VALUE klass )
249
249
  return self;
250
250
  }
251
251
 
252
-
253
- /*
254
- * Document-method: new
255
- *
256
- * call-seq:
257
- * PG::Connection.new -> conn
258
- * PG::Connection.new(connection_hash) -> conn
259
- * PG::Connection.new(connection_string) -> conn
260
- * PG::Connection.new(host, port, options, tty, dbname, user, password) -> conn
261
- *
262
- * Create a connection to the specified server.
263
- *
264
- * +connection_hash+ must be a ruby Hash with connection parameters.
265
- * See the {list of valid parameters}[https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS] in the PostgreSQL documentation.
266
- *
267
- * There are two accepted formats for +connection_string+: plain <code>keyword = value</code> strings and URIs.
268
- * See the documentation of {connection strings}[https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING].
269
- *
270
- * The positional parameter form has the same functionality except that the missing parameters will always take on default values. The parameters are:
271
- * [+host+]
272
- * server hostname
273
- * [+port+]
274
- * server port number
275
- * [+options+]
276
- * backend options
277
- * [+tty+]
278
- * (ignored in all versions of PostgreSQL)
279
- * [+dbname+]
280
- * connecting database name
281
- * [+user+]
282
- * login user name
283
- * [+password+]
284
- * login password
285
- *
286
- * Examples:
287
- *
288
- * # Connect using all defaults
289
- * PG::Connection.new
290
- *
291
- * # As a Hash
292
- * PG::Connection.new( dbname: 'test', port: 5432 )
293
- *
294
- * # As a String
295
- * PG::Connection.new( "dbname=test port=5432" )
296
- *
297
- * # As an Array
298
- * PG::Connection.new( nil, 5432, nil, nil, 'test', nil, nil )
299
- *
300
- * # As an URI
301
- * PG::Connection.new( "postgresql://user:pass@pgsql.example.com:5432/testdb?sslmode=require" )
302
- *
303
- * If the Ruby default internal encoding is set (i.e., <code>Encoding.default_internal != nil</code>), the
304
- * connection will have its +client_encoding+ set accordingly.
305
- *
306
- * Raises a PG::Error if the connection fails.
307
- */
308
252
  static VALUE
309
- pgconn_init(int argc, VALUE *argv, VALUE self)
253
+ pgconn_s_sync_connect(int argc, VALUE *argv, VALUE klass)
310
254
  {
311
255
  t_pg_connection *this;
312
256
  VALUE conninfo;
313
257
  VALUE error;
258
+ VALUE self = pgconn_s_allocate( klass );
314
259
 
315
260
  this = pg_get_connection( self );
316
261
  conninfo = rb_funcall2( rb_cPGconn, rb_intern("parse_connect_args"), argc, argv );
@@ -383,28 +328,8 @@ pgconn_s_connect_start( int argc, VALUE *argv, VALUE klass )
383
328
  return rb_conn;
384
329
  }
385
330
 
386
- /*
387
- * call-seq:
388
- * PG::Connection.ping(connection_hash) -> Integer
389
- * PG::Connection.ping(connection_string) -> Integer
390
- * PG::Connection.ping(host, port, options, tty, dbname, login, password) -> Integer
391
- *
392
- * Check server status.
393
- *
394
- * See PG::Connection.new for a description of the parameters.
395
- *
396
- * Returns one of:
397
- * [+PQPING_OK+]
398
- * server is accepting connections
399
- * [+PQPING_REJECT+]
400
- * server is alive but rejecting connections
401
- * [+PQPING_NO_RESPONSE+]
402
- * could not establish connection
403
- * [+PQPING_NO_ATTEMPT+]
404
- * connection not attempted (bad params)
405
- */
406
331
  static VALUE
407
- pgconn_s_ping( int argc, VALUE *argv, VALUE klass )
332
+ pgconn_s_sync_ping( int argc, VALUE *argv, VALUE klass )
408
333
  {
409
334
  PGPing ping;
410
335
  VALUE conninfo;
@@ -453,30 +378,8 @@ pgconn_s_conndefaults(VALUE self)
453
378
 
454
379
 
455
380
  #ifdef HAVE_PQENCRYPTPASSWORDCONN
456
- /*
457
- * call-seq:
458
- * conn.encrypt_password( password, username, algorithm=nil ) -> String
459
- *
460
- * This function is intended to be used by client applications that wish to send commands like <tt>ALTER USER joe PASSWORD 'pwd'</tt>.
461
- * It is good practice not to send the original cleartext password in such a command, because it might be exposed in command logs, activity displays, and so on.
462
- * Instead, use this function to convert the password to encrypted form before it is sent.
463
- *
464
- * The +password+ and +username+ arguments are the cleartext password, and the SQL name of the user it is for.
465
- * +algorithm+ specifies the encryption algorithm to use to encrypt the password.
466
- * Currently supported algorithms are +md5+ and +scram-sha-256+ (+on+ and +off+ are also accepted as aliases for +md5+, for compatibility with older server versions).
467
- * Note that support for +scram-sha-256+ was introduced in PostgreSQL version 10, and will not work correctly with older server versions.
468
- * If algorithm is omitted or +nil+, this function will query the server for the current value of the +password_encryption+ setting.
469
- * That can block, and will fail if the current transaction is aborted, or if the connection is busy executing another query.
470
- * If you wish to use the default algorithm for the server but want to avoid blocking, query +password_encryption+ yourself before calling #encrypt_password, and pass that value as the algorithm.
471
- *
472
- * Return value is the encrypted password.
473
- * The caller can assume the string doesn't contain any special characters that would require escaping.
474
- *
475
- * Available since PostgreSQL-10.
476
- * See also corresponding {libpq function}[https://www.postgresql.org/docs/current/libpq-misc.html#LIBPQ-PQENCRYPTPASSWORDCONN].
477
- */
478
381
  static VALUE
479
- pgconn_encrypt_password(int argc, VALUE *argv, VALUE self)
382
+ pgconn_sync_encrypt_password(int argc, VALUE *argv, VALUE self)
480
383
  {
481
384
  char *encrypted = NULL;
482
385
  VALUE rval = Qnil;
@@ -571,6 +474,11 @@ pgconn_connect_poll(VALUE self)
571
474
  {
572
475
  PostgresPollingStatusType status;
573
476
  status = gvl_PQconnectPoll(pg_get_pgconn(self));
477
+
478
+ if ( status == PGRES_POLLING_FAILED ) {
479
+ pgconn_close_socket_io(self);
480
+ }
481
+
574
482
  return INT2FIX((int)status);
575
483
  }
576
484
 
@@ -607,15 +515,8 @@ pgconn_finished_p( VALUE self )
607
515
  }
608
516
 
609
517
 
610
- /*
611
- * call-seq:
612
- * conn.reset()
613
- *
614
- * Resets the backend connection. This method closes the
615
- * backend connection and tries to re-connect.
616
- */
617
518
  static VALUE
618
- pgconn_reset( VALUE self )
519
+ pgconn_sync_reset( VALUE self )
619
520
  {
620
521
  pgconn_close_socket_io( self );
621
522
  gvl_PQreset( pg_get_pgconn(self) );
@@ -654,6 +555,11 @@ pgconn_reset_poll(VALUE self)
654
555
  {
655
556
  PostgresPollingStatusType status;
656
557
  status = gvl_PQresetPoll(pg_get_pgconn(self));
558
+
559
+ if ( status == PGRES_POLLING_FAILED ) {
560
+ pgconn_close_socket_io(self);
561
+ }
562
+
657
563
  return INT2FIX((int)status);
658
564
  }
659
565
 
@@ -779,7 +685,11 @@ pgconn_conninfo( VALUE self )
779
685
  * call-seq:
780
686
  * conn.status()
781
687
  *
782
- * Returns status of connection : CONNECTION_OK or CONNECTION_BAD
688
+ * Returns the status of the connection, which is one:
689
+ * PG::Constants::CONNECTION_OK
690
+ * PG::Constants::CONNECTION_BAD
691
+ *
692
+ * ... and other constants of kind PG::Constants::CONNECTION_*
783
693
  */
784
694
  static VALUE
785
695
  pgconn_status(VALUE self)
@@ -1044,7 +954,7 @@ pgconn_connection_used_password(VALUE self)
1044
954
  /* :TODO: get_ssl */
1045
955
 
1046
956
 
1047
- static VALUE pgconn_exec_params( int, VALUE *, VALUE );
957
+ static VALUE pgconn_sync_exec_params( int, VALUE *, VALUE );
1048
958
 
1049
959
  /*
1050
960
  * call-seq:
@@ -1062,7 +972,7 @@ static VALUE pgconn_exec_params( int, VALUE *, VALUE );
1062
972
  * It can therefore schedule things like garbage collection, while queries are running like in this proposal: https://bugs.ruby-lang.org/issues/14723
1063
973
  */
1064
974
  static VALUE
1065
- pgconn_exec(int argc, VALUE *argv, VALUE self)
975
+ pgconn_sync_exec(int argc, VALUE *argv, VALUE self)
1066
976
  {
1067
977
  t_pg_connection *this = pg_get_connection_safe( self );
1068
978
  PGresult *result = NULL;
@@ -1083,7 +993,7 @@ pgconn_exec(int argc, VALUE *argv, VALUE self)
1083
993
  pg_deprecated(0, ("forwarding exec to exec_params is deprecated"));
1084
994
 
1085
995
  /* Otherwise, just call #exec_params instead for backward-compatibility */
1086
- return pgconn_exec_params( argc, argv, self );
996
+ return pgconn_sync_exec_params( argc, argv, self );
1087
997
 
1088
998
  }
1089
999
 
@@ -1365,7 +1275,7 @@ pgconn_query_assign_typemap( VALUE self, struct query_params_data *paramsData )
1365
1275
  * It's not recommended to use explicit sync or async variants but #exec_params instead, unless you have a good reason to do so.
1366
1276
  */
1367
1277
  static VALUE
1368
- pgconn_exec_params( int argc, VALUE *argv, VALUE self )
1278
+ pgconn_sync_exec_params( int argc, VALUE *argv, VALUE self )
1369
1279
  {
1370
1280
  t_pg_connection *this = pg_get_connection_safe( self );
1371
1281
  PGresult *result = NULL;
@@ -1385,7 +1295,7 @@ pgconn_exec_params( int argc, VALUE *argv, VALUE self )
1385
1295
  */
1386
1296
  if ( NIL_P(paramsData.params) ) {
1387
1297
  pg_deprecated(1, ("forwarding exec_params to exec is deprecated"));
1388
- return pgconn_exec( 1, argv, self );
1298
+ return pgconn_sync_exec( 1, argv, self );
1389
1299
  }
1390
1300
  pgconn_query_assign_typemap( self, &paramsData );
1391
1301
 
@@ -1416,7 +1326,7 @@ pgconn_exec_params( int argc, VALUE *argv, VALUE self )
1416
1326
  * It's not recommended to use explicit sync or async variants but #prepare instead, unless you have a good reason to do so.
1417
1327
  */
1418
1328
  static VALUE
1419
- pgconn_prepare(int argc, VALUE *argv, VALUE self)
1329
+ pgconn_sync_prepare(int argc, VALUE *argv, VALUE self)
1420
1330
  {
1421
1331
  t_pg_connection *this = pg_get_connection_safe( self );
1422
1332
  PGresult *result = NULL;
@@ -1465,7 +1375,7 @@ pgconn_prepare(int argc, VALUE *argv, VALUE self)
1465
1375
  * It's not recommended to use explicit sync or async variants but #exec_prepared instead, unless you have a good reason to do so.
1466
1376
  */
1467
1377
  static VALUE
1468
- pgconn_exec_prepared(int argc, VALUE *argv, VALUE self)
1378
+ pgconn_sync_exec_prepared(int argc, VALUE *argv, VALUE self)
1469
1379
  {
1470
1380
  t_pg_connection *this = pg_get_connection_safe( self );
1471
1381
  PGresult *result = NULL;
@@ -1510,7 +1420,7 @@ pgconn_exec_prepared(int argc, VALUE *argv, VALUE self)
1510
1420
  * It's not recommended to use explicit sync or async variants but #describe_prepared instead, unless you have a good reason to do so.
1511
1421
  */
1512
1422
  static VALUE
1513
- pgconn_describe_prepared(VALUE self, VALUE stmt_name)
1423
+ pgconn_sync_describe_prepared(VALUE self, VALUE stmt_name)
1514
1424
  {
1515
1425
  PGresult *result;
1516
1426
  VALUE rb_pgresult;
@@ -1538,7 +1448,7 @@ pgconn_describe_prepared(VALUE self, VALUE stmt_name)
1538
1448
  * It's not recommended to use explicit sync or async variants but #describe_portal instead, unless you have a good reason to do so.
1539
1449
  */
1540
1450
  static VALUE
1541
- pgconn_describe_portal(self, stmt_name)
1451
+ pgconn_sync_describe_portal(self, stmt_name)
1542
1452
  VALUE self, stmt_name;
1543
1453
  {
1544
1454
  PGresult *result;
@@ -2133,24 +2043,8 @@ pgconn_send_describe_portal(VALUE self, VALUE portal)
2133
2043
  }
2134
2044
 
2135
2045
 
2136
- /*
2137
- * call-seq:
2138
- * conn.get_result() -> PG::Result
2139
- * conn.get_result() {|pg_result| block }
2140
- *
2141
- * Blocks waiting for the next result from a call to
2142
- * #send_query (or another asynchronous command), and returns
2143
- * it. Returns +nil+ if no more results are available.
2144
- *
2145
- * Note: call this function repeatedly until it returns +nil+, or else
2146
- * you will not be able to issue further commands.
2147
- *
2148
- * If the optional code block is given, it will be passed <i>result</i> as an argument,
2149
- * and the PG::Result object will automatically be cleared when the block terminates.
2150
- * In this instance, <code>conn.exec</code> returns the value of the block.
2151
- */
2152
2046
  static VALUE
2153
- pgconn_get_result(VALUE self)
2047
+ pgconn_sync_get_result(VALUE self)
2154
2048
  {
2155
2049
  PGconn *conn = pg_get_pgconn(self);
2156
2050
  PGresult *result;
@@ -2183,6 +2077,7 @@ pgconn_consume_input(self)
2183
2077
  PGconn *conn = pg_get_pgconn(self);
2184
2078
  /* returns 0 on error */
2185
2079
  if(PQconsumeInput(conn) == 0) {
2080
+ pgconn_close_socket_io(self);
2186
2081
  error = rb_exc_new2(rb_eConnectionBad, PQerrorMessage(conn));
2187
2082
  rb_iv_set(error, "@connection", self);
2188
2083
  rb_exc_raise(error);
@@ -2195,7 +2090,7 @@ pgconn_consume_input(self)
2195
2090
  * conn.is_busy() -> Boolean
2196
2091
  *
2197
2092
  * Returns +true+ if a command is busy, that is, if
2198
- * PQgetResult would block. Otherwise returns +false+.
2093
+ * #get_result would block. Otherwise returns +false+.
2199
2094
  */
2200
2095
  static VALUE
2201
2096
  pgconn_is_busy(self)
@@ -2204,24 +2099,8 @@ pgconn_is_busy(self)
2204
2099
  return gvl_PQisBusy(pg_get_pgconn(self)) ? Qtrue : Qfalse;
2205
2100
  }
2206
2101
 
2207
- /*
2208
- * call-seq:
2209
- * conn.setnonblocking(Boolean) -> nil
2210
- *
2211
- * Sets the nonblocking status of the connection.
2212
- * In the blocking state, calls to #send_query
2213
- * will block until the message is sent to the server,
2214
- * but will not wait for the query results.
2215
- * In the nonblocking state, calls to #send_query
2216
- * will return an error if the socket is not ready for
2217
- * writing.
2218
- * Note: This function does not affect #exec, because
2219
- * that function doesn't return until the server has
2220
- * processed the query and returned the results.
2221
- * Returns +nil+.
2222
- */
2223
2102
  static VALUE
2224
- pgconn_setnonblocking(self, state)
2103
+ pgconn_sync_setnonblocking(self, state)
2225
2104
  VALUE self, state;
2226
2105
  {
2227
2106
  int arg;
@@ -2243,30 +2122,13 @@ pgconn_setnonblocking(self, state)
2243
2122
  }
2244
2123
 
2245
2124
 
2246
- /*
2247
- * call-seq:
2248
- * conn.isnonblocking() -> Boolean
2249
- *
2250
- * Returns +true+ if a command is busy, that is, if
2251
- * PQgetResult would block. Otherwise returns +false+.
2252
- */
2253
2125
  static VALUE
2254
- pgconn_isnonblocking(self)
2126
+ pgconn_sync_isnonblocking(self)
2255
2127
  VALUE self;
2256
2128
  {
2257
2129
  return PQisnonblocking(pg_get_pgconn(self)) ? Qtrue : Qfalse;
2258
2130
  }
2259
2131
 
2260
- /*
2261
- * call-seq:
2262
- * conn.flush() -> Boolean
2263
- *
2264
- * Attempts to flush any queued output data to the server.
2265
- * Returns +true+ if data is successfully flushed, +false+
2266
- * if not (can only return +false+ if connection is
2267
- * nonblocking.
2268
- * Raises PG::Error if some other failure occurred.
2269
- */
2270
2132
  static VALUE
2271
2133
  pgconn_sync_flush(VALUE self)
2272
2134
  {
@@ -2282,18 +2144,8 @@ pgconn_sync_flush(VALUE self)
2282
2144
  return (ret) ? Qfalse : Qtrue;
2283
2145
  }
2284
2146
 
2285
- /*
2286
- * call-seq:
2287
- * conn.cancel() -> String
2288
- *
2289
- * Requests cancellation of the command currently being
2290
- * processed.
2291
- *
2292
- * Returns +nil+ on success, or a string containing the
2293
- * error message if a failure occurs.
2294
- */
2295
2147
  static VALUE
2296
- pgconn_cancel(VALUE self)
2148
+ pgconn_sync_cancel(VALUE self)
2297
2149
  {
2298
2150
  char errbuf[256];
2299
2151
  PGcancel *cancel;
@@ -2395,8 +2247,10 @@ wait_socket_readable( VALUE self, struct timeval *ptimeout, void *(*is_readable)
2395
2247
  socket_io = pgconn_socket_io(self);
2396
2248
 
2397
2249
  /* Check for connection errors (PQisBusy is true on connection errors) */
2398
- if ( PQconsumeInput(conn) == 0 )
2250
+ if ( PQconsumeInput(conn) == 0 ) {
2251
+ pgconn_close_socket_io(self);
2399
2252
  rb_raise( rb_eConnectionBad, "PQconsumeInput() %s", PQerrorMessage(conn) );
2253
+ }
2400
2254
 
2401
2255
  if ( ptimeout ) {
2402
2256
  gettimeofday(&currtime, NULL);
@@ -2425,6 +2279,7 @@ wait_socket_readable( VALUE self, struct timeval *ptimeout, void *(*is_readable)
2425
2279
 
2426
2280
  /* Check for connection errors (PQisBusy is true on connection errors) */
2427
2281
  if ( PQconsumeInput(conn) == 0 ){
2282
+ pgconn_close_socket_io(self);
2428
2283
  rb_raise( rb_eConnectionBad, "PQconsumeInput() %s", PQerrorMessage(conn) );
2429
2284
  }
2430
2285
  }
@@ -2432,6 +2287,16 @@ wait_socket_readable( VALUE self, struct timeval *ptimeout, void *(*is_readable)
2432
2287
  return retval;
2433
2288
  }
2434
2289
 
2290
+ /*
2291
+ * call-seq:
2292
+ * conn.flush() -> Boolean
2293
+ *
2294
+ * Attempts to flush any queued output data to the server.
2295
+ * Returns +true+ if data is successfully flushed, +false+
2296
+ * if not (can only return +false+ if connection is
2297
+ * nonblocking.
2298
+ * Raises PG::Error if some other failure occurred.
2299
+ */
2435
2300
  static VALUE
2436
2301
  pgconn_async_flush(VALUE self)
2437
2302
  {
@@ -2520,28 +2385,8 @@ pgconn_wait_for_notify(int argc, VALUE *argv, VALUE self)
2520
2385
  }
2521
2386
 
2522
2387
 
2523
- /*
2524
- * call-seq:
2525
- * conn.put_copy_data( buffer [, encoder] ) -> Boolean
2526
- *
2527
- * Transmits _buffer_ as copy data to the server.
2528
- * Returns true if the data was sent, false if it was
2529
- * not sent (false is only possible if the connection
2530
- * is in nonblocking mode, and this command would block).
2531
- *
2532
- * _encoder_ can be a PG::Coder derivation (typically PG::TextEncoder::CopyRow).
2533
- * This encodes the data fields given as _buffer_ from an Array of Strings to
2534
- * PostgreSQL's COPY text format inclusive proper escaping. Optionally
2535
- * the encoder can type cast the fields from various Ruby types in one step,
2536
- * if PG::TextEncoder::CopyRow#type_map is set accordingly.
2537
- *
2538
- * Raises an exception if an error occurs.
2539
- *
2540
- * See also #copy_data.
2541
- *
2542
- */
2543
2388
  static VALUE
2544
- pgconn_put_copy_data(int argc, VALUE *argv, VALUE self)
2389
+ pgconn_sync_put_copy_data(int argc, VALUE *argv, VALUE self)
2545
2390
  {
2546
2391
  int ret;
2547
2392
  int len;
@@ -2596,22 +2441,8 @@ pgconn_put_copy_data(int argc, VALUE *argv, VALUE self)
2596
2441
  return (ret) ? Qtrue : Qfalse;
2597
2442
  }
2598
2443
 
2599
- /*
2600
- * call-seq:
2601
- * conn.put_copy_end( [ error_message ] ) -> Boolean
2602
- *
2603
- * Sends end-of-data indication to the server.
2604
- *
2605
- * _error_message_ is an optional parameter, and if set,
2606
- * forces the COPY command to fail with the string
2607
- * _error_message_.
2608
- *
2609
- * Returns true if the end-of-data was sent, *false* if it was
2610
- * not sent (*false* is only possible if the connection
2611
- * is in nonblocking mode, and this command would block).
2612
- */
2613
2444
  static VALUE
2614
- pgconn_put_copy_end(int argc, VALUE *argv, VALUE self)
2445
+ pgconn_sync_put_copy_end(int argc, VALUE *argv, VALUE self)
2615
2446
  {
2616
2447
  VALUE str;
2617
2448
  VALUE error;
@@ -2633,27 +2464,8 @@ pgconn_put_copy_end(int argc, VALUE *argv, VALUE self)
2633
2464
  return (ret) ? Qtrue : Qfalse;
2634
2465
  }
2635
2466
 
2636
- /*
2637
- * call-seq:
2638
- * conn.get_copy_data( [ nonblock = false [, decoder = nil ]] ) -> Object
2639
- *
2640
- * Return one row of data, +nil+
2641
- * if the copy is done, or +false+ if the call would
2642
- * block (only possible if _nonblock_ is true).
2643
- *
2644
- * If _decoder_ is not set or +nil+, data is returned as binary string.
2645
- *
2646
- * If _decoder_ is set to a PG::Coder derivation, the return type depends on this decoder.
2647
- * PG::TextDecoder::CopyRow decodes the received data fields from one row of PostgreSQL's
2648
- * COPY text format to an Array of Strings.
2649
- * Optionally the decoder can type cast the single fields to various Ruby types in one step,
2650
- * if PG::TextDecoder::CopyRow#type_map is set accordingly.
2651
- *
2652
- * See also #copy_data.
2653
- *
2654
- */
2655
2467
  static VALUE
2656
- pgconn_get_copy_data(int argc, VALUE *argv, VALUE self )
2468
+ pgconn_sync_get_copy_data(int argc, VALUE *argv, VALUE self )
2657
2469
  {
2658
2470
  VALUE async_in;
2659
2471
  VALUE error;
@@ -2978,7 +2790,7 @@ pgconn_get_client_encoding(VALUE self)
2978
2790
  * It's not recommended to use explicit sync or async variants but #set_client_encoding instead, unless you have a good reason to do so.
2979
2791
  */
2980
2792
  static VALUE
2981
- pgconn_set_client_encoding(VALUE self, VALUE str)
2793
+ pgconn_sync_set_client_encoding(VALUE self, VALUE str)
2982
2794
  {
2983
2795
  PGconn *conn = pg_get_pgconn( self );
2984
2796
 
@@ -3099,7 +2911,7 @@ pgconn_block( int argc, VALUE *argv, VALUE self ) {
3099
2911
  * It's not recommended to use explicit sync or async variants but #get_last_result instead, unless you have a good reason to do so.
3100
2912
  */
3101
2913
  static VALUE
3102
- pgconn_get_last_result(VALUE self)
2914
+ pgconn_sync_get_last_result(VALUE self)
3103
2915
  {
3104
2916
  PGconn *conn = pg_get_pgconn(self);
3105
2917
  VALUE rb_pgresult = Qnil;
@@ -3205,8 +3017,10 @@ pgconn_discard_results(VALUE self)
3205
3017
  */
3206
3018
  while( gvl_PQisBusy(conn) ){
3207
3019
  rb_io_wait(socket_io, RB_INT2NUM(RUBY_IO_READABLE), Qnil);
3208
- if ( PQconsumeInput(conn) == 0 )
3020
+ if ( PQconsumeInput(conn) == 0 ) {
3021
+ pgconn_close_socket_io(self);
3209
3022
  return Qfalse;
3023
+ }
3210
3024
  }
3211
3025
 
3212
3026
  cur = gvl_PQgetResult(conn);
@@ -3224,8 +3038,10 @@ pgconn_discard_results(VALUE self)
3224
3038
  if( st == 0 ) {
3225
3039
  /* would block -> wait for readable data */
3226
3040
  rb_io_wait(socket_io, RB_INT2NUM(RUBY_IO_READABLE), Qnil);
3227
- if ( PQconsumeInput(conn) == 0 )
3041
+ if ( PQconsumeInput(conn) == 0 ) {
3042
+ pgconn_close_socket_io(self);
3228
3043
  return Qfalse;
3044
+ }
3229
3045
  } else if( st > 0 ) {
3230
3046
  /* some data retrieved -> discard it */
3231
3047
  PQfreemem(buffer);
@@ -4037,11 +3853,11 @@ static VALUE
4037
3853
  pgconn_internal_encoding_set(VALUE self, VALUE enc)
4038
3854
  {
4039
3855
  if (NIL_P(enc)) {
4040
- pgconn_set_client_encoding( self, rb_usascii_str_new_cstr("SQL_ASCII") );
3856
+ pgconn_sync_set_client_encoding( self, rb_usascii_str_new_cstr("SQL_ASCII") );
4041
3857
  return enc;
4042
3858
  }
4043
3859
  else if ( TYPE(enc) == T_STRING && strcasecmp("JOHAB", StringValueCStr(enc)) == 0 ) {
4044
- pgconn_set_client_encoding(self, rb_usascii_str_new_cstr("JOHAB"));
3860
+ pgconn_sync_set_client_encoding(self, rb_usascii_str_new_cstr("JOHAB"));
4045
3861
  return enc;
4046
3862
  }
4047
3863
  else {
@@ -4405,10 +4221,6 @@ init_pg_connection()
4405
4221
  /****** PG::Connection CLASS METHODS ******/
4406
4222
  rb_define_alloc_func( rb_cPGconn, pgconn_s_allocate );
4407
4223
 
4408
- SINGLETON_ALIAS(rb_cPGconn, "connect", "new");
4409
- SINGLETON_ALIAS(rb_cPGconn, "open", "new");
4410
- SINGLETON_ALIAS(rb_cPGconn, "setdb", "new");
4411
- SINGLETON_ALIAS(rb_cPGconn, "setdblogin", "new");
4412
4224
  rb_define_singleton_method(rb_cPGconn, "escape_string", pgconn_s_escape, 1);
4413
4225
  SINGLETON_ALIAS(rb_cPGconn, "escape", "escape_string");
4414
4226
  rb_define_singleton_method(rb_cPGconn, "escape_bytea", pgconn_s_escape_bytea, 1);
@@ -4417,14 +4229,14 @@ init_pg_connection()
4417
4229
  rb_define_singleton_method(rb_cPGconn, "quote_ident", pgconn_s_quote_ident, 1);
4418
4230
  rb_define_singleton_method(rb_cPGconn, "connect_start", pgconn_s_connect_start, -1);
4419
4231
  rb_define_singleton_method(rb_cPGconn, "conndefaults", pgconn_s_conndefaults, 0);
4420
- rb_define_singleton_method(rb_cPGconn, "ping", pgconn_s_ping, -1);
4232
+ rb_define_singleton_method(rb_cPGconn, "sync_ping", pgconn_s_sync_ping, -1);
4233
+ rb_define_singleton_method(rb_cPGconn, "sync_connect", pgconn_s_sync_connect, -1);
4421
4234
 
4422
4235
  /****** PG::Connection INSTANCE METHODS: Connection Control ******/
4423
- rb_define_method(rb_cPGconn, "initialize", pgconn_init, -1);
4424
4236
  rb_define_method(rb_cPGconn, "connect_poll", pgconn_connect_poll, 0);
4425
4237
  rb_define_method(rb_cPGconn, "finish", pgconn_finish, 0);
4426
4238
  rb_define_method(rb_cPGconn, "finished?", pgconn_finished_p, 0);
4427
- rb_define_method(rb_cPGconn, "reset", pgconn_reset, 0);
4239
+ rb_define_method(rb_cPGconn, "sync_reset", pgconn_sync_reset, 0);
4428
4240
  rb_define_method(rb_cPGconn, "reset_start", pgconn_reset_start, 0);
4429
4241
  rb_define_method(rb_cPGconn, "reset_poll", pgconn_reset_poll, 0);
4430
4242
  rb_define_alias(rb_cPGconn, "close", "finish");
@@ -4453,12 +4265,12 @@ init_pg_connection()
4453
4265
  /* rb_define_method(rb_cPGconn, "getssl", pgconn_getssl, 0); */
4454
4266
 
4455
4267
  /****** PG::Connection INSTANCE METHODS: Command Execution ******/
4456
- rb_define_method(rb_cPGconn, "sync_exec", pgconn_exec, -1);
4457
- rb_define_method(rb_cPGconn, "sync_exec_params", pgconn_exec_params, -1);
4458
- rb_define_method(rb_cPGconn, "sync_prepare", pgconn_prepare, -1);
4459
- rb_define_method(rb_cPGconn, "sync_exec_prepared", pgconn_exec_prepared, -1);
4460
- rb_define_method(rb_cPGconn, "sync_describe_prepared", pgconn_describe_prepared, 1);
4461
- rb_define_method(rb_cPGconn, "sync_describe_portal", pgconn_describe_portal, 1);
4268
+ rb_define_method(rb_cPGconn, "sync_exec", pgconn_sync_exec, -1);
4269
+ rb_define_method(rb_cPGconn, "sync_exec_params", pgconn_sync_exec_params, -1);
4270
+ rb_define_method(rb_cPGconn, "sync_prepare", pgconn_sync_prepare, -1);
4271
+ rb_define_method(rb_cPGconn, "sync_exec_prepared", pgconn_sync_exec_prepared, -1);
4272
+ rb_define_method(rb_cPGconn, "sync_describe_prepared", pgconn_sync_describe_prepared, 1);
4273
+ rb_define_method(rb_cPGconn, "sync_describe_portal", pgconn_sync_describe_portal, 1);
4462
4274
 
4463
4275
  rb_define_method(rb_cPGconn, "exec", pgconn_async_exec, -1);
4464
4276
  rb_define_method(rb_cPGconn, "exec_params", pgconn_async_exec_params, -1);
@@ -4491,26 +4303,26 @@ init_pg_connection()
4491
4303
  rb_define_method(rb_cPGconn, "send_query_prepared", pgconn_send_query_prepared, -1);
4492
4304
  rb_define_method(rb_cPGconn, "send_describe_prepared", pgconn_send_describe_prepared, 1);
4493
4305
  rb_define_method(rb_cPGconn, "send_describe_portal", pgconn_send_describe_portal, 1);
4494
- rb_define_method(rb_cPGconn, "get_result", pgconn_get_result, 0);
4306
+ rb_define_method(rb_cPGconn, "sync_get_result", pgconn_sync_get_result, 0);
4495
4307
  rb_define_method(rb_cPGconn, "consume_input", pgconn_consume_input, 0);
4496
4308
  rb_define_method(rb_cPGconn, "is_busy", pgconn_is_busy, 0);
4497
- rb_define_method(rb_cPGconn, "setnonblocking", pgconn_setnonblocking, 1);
4498
- rb_define_method(rb_cPGconn, "isnonblocking", pgconn_isnonblocking, 0);
4499
- rb_define_alias(rb_cPGconn, "nonblocking?", "isnonblocking");
4309
+ rb_define_method(rb_cPGconn, "sync_setnonblocking", pgconn_sync_setnonblocking, 1);
4310
+ rb_define_method(rb_cPGconn, "sync_isnonblocking", pgconn_sync_isnonblocking, 0);
4500
4311
  rb_define_method(rb_cPGconn, "sync_flush", pgconn_sync_flush, 0);
4501
- rb_define_method(rb_cPGconn, "async_flush", pgconn_async_flush, 0);
4312
+ rb_define_method(rb_cPGconn, "flush", pgconn_async_flush, 0);
4313
+ rb_define_alias(rb_cPGconn, "async_flush", "flush");
4502
4314
  rb_define_method(rb_cPGconn, "discard_results", pgconn_discard_results, 0);
4503
4315
 
4504
4316
  /****** PG::Connection INSTANCE METHODS: Cancelling Queries in Progress ******/
4505
- rb_define_method(rb_cPGconn, "cancel", pgconn_cancel, 0);
4317
+ rb_define_method(rb_cPGconn, "sync_cancel", pgconn_sync_cancel, 0);
4506
4318
 
4507
4319
  /****** PG::Connection INSTANCE METHODS: NOTIFY ******/
4508
4320
  rb_define_method(rb_cPGconn, "notifies", pgconn_notifies, 0);
4509
4321
 
4510
4322
  /****** PG::Connection INSTANCE METHODS: COPY ******/
4511
- rb_define_method(rb_cPGconn, "put_copy_data", pgconn_put_copy_data, -1);
4512
- rb_define_method(rb_cPGconn, "put_copy_end", pgconn_put_copy_end, -1);
4513
- rb_define_method(rb_cPGconn, "get_copy_data", pgconn_get_copy_data, -1);
4323
+ rb_define_method(rb_cPGconn, "sync_put_copy_data", pgconn_sync_put_copy_data, -1);
4324
+ rb_define_method(rb_cPGconn, "sync_put_copy_end", pgconn_sync_put_copy_end, -1);
4325
+ rb_define_method(rb_cPGconn, "sync_get_copy_data", pgconn_sync_get_copy_data, -1);
4514
4326
 
4515
4327
  /****** PG::Connection INSTANCE METHODS: Control Functions ******/
4516
4328
  rb_define_method(rb_cPGconn, "set_error_verbosity", pgconn_set_error_verbosity, 1);
@@ -4526,18 +4338,20 @@ init_pg_connection()
4526
4338
 
4527
4339
  /****** PG::Connection INSTANCE METHODS: Other ******/
4528
4340
  rb_define_method(rb_cPGconn, "get_client_encoding", pgconn_get_client_encoding, 0);
4529
- rb_define_method(rb_cPGconn, "sync_set_client_encoding", pgconn_set_client_encoding, 1);
4530
- rb_define_method(rb_cPGconn, "async_set_client_encoding", pgconn_async_set_client_encoding, 1);
4531
- rb_define_alias(rb_cPGconn, "async_client_encoding=", "async_set_client_encoding");
4341
+ rb_define_method(rb_cPGconn, "sync_set_client_encoding", pgconn_sync_set_client_encoding, 1);
4342
+ rb_define_method(rb_cPGconn, "set_client_encoding", pgconn_async_set_client_encoding, 1);
4343
+ rb_define_alias(rb_cPGconn, "async_set_client_encoding", "set_client_encoding");
4344
+ rb_define_alias(rb_cPGconn, "client_encoding=", "set_client_encoding");
4532
4345
  rb_define_method(rb_cPGconn, "block", pgconn_block, -1);
4533
4346
  rb_define_private_method(rb_cPGconn, "flush_data=", pgconn_flush_data_set, 1);
4534
4347
  rb_define_method(rb_cPGconn, "wait_for_notify", pgconn_wait_for_notify, -1);
4535
4348
  rb_define_alias(rb_cPGconn, "notifies_wait", "wait_for_notify");
4536
4349
  rb_define_method(rb_cPGconn, "quote_ident", pgconn_s_quote_ident, 1);
4537
- rb_define_method(rb_cPGconn, "sync_get_last_result", pgconn_get_last_result, 0);
4538
- rb_define_method(rb_cPGconn, "async_get_last_result", pgconn_async_get_last_result, 0);
4350
+ rb_define_method(rb_cPGconn, "sync_get_last_result", pgconn_sync_get_last_result, 0);
4351
+ rb_define_method(rb_cPGconn, "get_last_result", pgconn_async_get_last_result, 0);
4352
+ rb_define_alias(rb_cPGconn, "async_get_last_result", "get_last_result");
4539
4353
  #ifdef HAVE_PQENCRYPTPASSWORDCONN
4540
- rb_define_method(rb_cPGconn, "encrypt_password", pgconn_encrypt_password, -1);
4354
+ rb_define_method(rb_cPGconn, "sync_encrypt_password", pgconn_sync_encrypt_password, -1);
4541
4355
  #endif
4542
4356
 
4543
4357
  #ifdef HAVE_PQSSLATTRIBUTE
data/lib/2.5/pg_ext.so CHANGED
Binary file
data/lib/2.6/pg_ext.so CHANGED
Binary file
data/lib/2.7/pg_ext.so CHANGED
Binary file
data/lib/3.0/pg_ext.so CHANGED
Binary file
data/lib/3.1/pg_ext.so ADDED
Binary file
@@ -162,7 +162,7 @@ class PG::BasicTypeRegistry
162
162
 
163
163
  include Checker
164
164
 
165
- def initialize
165
+ def initialize
166
166
  # The key of these hashs maps to the `typname` column from the table pg_type.
167
167
  @coders_by_name = []
168
168
  end