pg 1.3.0.rc2-x86-mingw32 → 1.3.0.rc3-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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/source-gem.yml +0 -1
- data/ext/pg_connection.c +23 -14
- data/lib/2.5/pg_ext.so +0 -0
- data/lib/2.6/pg_ext.so +0 -0
- data/lib/2.7/pg_ext.so +0 -0
- data/lib/3.0/pg_ext.so +0 -0
- data/lib/3.1/pg_ext.so +0 -0
- data/lib/pg/connection.rb +8 -1
- data/lib/pg/version.rb +1 -1
- data/lib/pg.rb +2 -2
- data/lib/x86-mingw32/libpq.dll +0 -0
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bef00da7bdb5806dec24d5bbf7bae1169e8d68bb03158a0f16869bebf70cab4
|
4
|
+
data.tar.gz: b9faa4e1655663d53156fb27fa1da4d1435008f3e95d2d88dfc826a7efb60ef0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e998da24080f6d3f7b2111eb549f694053539a262fdf131cb1a21be236fe070f03c8fe107faacb46dec3602cdb29e5ec28e64f225b19580ae8503d9d68d3d6c3
|
7
|
+
data.tar.gz: 9a0610d0323686408b86cf13013ce376de4fcc1629c79ed92f4cf57da0dc11f571978f94b1a97b323b50b538ed95362b383ebf5c3fd979ba50f38a050821e6f5
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/ext/pg_connection.c
CHANGED
@@ -968,8 +968,8 @@ static VALUE pgconn_sync_exec_params( int, VALUE *, VALUE );
|
|
968
968
|
* However #async_exec has two advantages:
|
969
969
|
*
|
970
970
|
* 1. #async_exec can be aborted by signals (like Ctrl-C), while #exec blocks signal processing until the query is answered.
|
971
|
-
* 2. Ruby VM gets notified about IO blocked operations.
|
972
|
-
*
|
971
|
+
* 2. Ruby VM gets notified about IO blocked operations and can pass them through <tt>Fiber.scheduler</tt>.
|
972
|
+
* So only <tt>async_*</tt> methods are compatible to event based schedulers like the async gem.
|
973
973
|
*/
|
974
974
|
static VALUE
|
975
975
|
pgconn_sync_exec(int argc, VALUE *argv, VALUE self)
|
@@ -2208,17 +2208,25 @@ pgconn_notifies(VALUE self)
|
|
2208
2208
|
}
|
2209
2209
|
|
2210
2210
|
|
2211
|
-
#if
|
2211
|
+
#if defined(HAVE_RB_IO_WAIT)
|
2212
|
+
|
2213
|
+
/* Use our own function and constants names, to avoid conflicts with truffleruby-head on its road to ruby-3.0 compatibility. */
|
2214
|
+
#define pg_rb_io_wait rb_io_wait
|
2215
|
+
#define PG_RUBY_IO_READABLE RUBY_IO_READABLE
|
2216
|
+
#define PG_RUBY_IO_WRITABLE RUBY_IO_WRITABLE
|
2217
|
+
#define PG_RUBY_IO_PRIORITY RUBY_IO_PRIORITY
|
2218
|
+
|
2219
|
+
#else
|
2212
2220
|
/* For compat with ruby < 3.0 */
|
2213
2221
|
|
2214
2222
|
typedef enum {
|
2215
|
-
|
2216
|
-
|
2217
|
-
|
2218
|
-
}
|
2223
|
+
PG_RUBY_IO_READABLE = RB_WAITFD_IN,
|
2224
|
+
PG_RUBY_IO_WRITABLE = RB_WAITFD_OUT,
|
2225
|
+
PG_RUBY_IO_PRIORITY = RB_WAITFD_PRI,
|
2226
|
+
} pg_rb_io_event_t;
|
2219
2227
|
|
2220
2228
|
static VALUE
|
2221
|
-
|
2229
|
+
pg_rb_io_wait(VALUE io, VALUE events, VALUE timeout) {
|
2222
2230
|
rb_io_t *fptr;
|
2223
2231
|
struct timeval waittime;
|
2224
2232
|
int res;
|
@@ -2267,7 +2275,7 @@ wait_socket_readable( VALUE self, struct timeval *ptimeout, void *(*is_readable)
|
|
2267
2275
|
/* Is the given timeout valid? */
|
2268
2276
|
if( !ptimeout || (waittime.tv_sec >= 0 && waittime.tv_usec >= 0) ){
|
2269
2277
|
/* Wait for the socket to become readable before checking again */
|
2270
|
-
ret =
|
2278
|
+
ret = pg_rb_io_wait(socket_io, RB_INT2NUM(PG_RUBY_IO_READABLE), wait_timeout);
|
2271
2279
|
} else {
|
2272
2280
|
ret = Qfalse;
|
2273
2281
|
}
|
@@ -2304,9 +2312,9 @@ pgconn_async_flush(VALUE self)
|
|
2304
2312
|
/* wait for the socket to become read- or write-ready */
|
2305
2313
|
int events;
|
2306
2314
|
VALUE socket_io = pgconn_socket_io(self);
|
2307
|
-
events = RB_NUM2INT(
|
2315
|
+
events = RB_NUM2INT(pg_rb_io_wait(socket_io, RB_INT2NUM(PG_RUBY_IO_READABLE | PG_RUBY_IO_WRITABLE), Qnil));
|
2308
2316
|
|
2309
|
-
if (events &
|
2317
|
+
if (events & PG_RUBY_IO_READABLE)
|
2310
2318
|
pgconn_consume_input(self);
|
2311
2319
|
}
|
2312
2320
|
return Qtrue;
|
@@ -3013,10 +3021,10 @@ pgconn_discard_results(VALUE self)
|
|
3013
3021
|
int status;
|
3014
3022
|
|
3015
3023
|
/* pgconn_block() raises an exception in case of errors.
|
3016
|
-
* To avoid this call
|
3024
|
+
* To avoid this call pg_rb_io_wait() and PQconsumeInput() without rb_raise().
|
3017
3025
|
*/
|
3018
3026
|
while( gvl_PQisBusy(conn) ){
|
3019
|
-
|
3027
|
+
pg_rb_io_wait(socket_io, RB_INT2NUM(PG_RUBY_IO_READABLE), Qnil);
|
3020
3028
|
if ( PQconsumeInput(conn) == 0 ) {
|
3021
3029
|
pgconn_close_socket_io(self);
|
3022
3030
|
return Qfalse;
|
@@ -3037,7 +3045,7 @@ pgconn_discard_results(VALUE self)
|
|
3037
3045
|
int st = gvl_PQgetCopyData(conn, &buffer, 1);
|
3038
3046
|
if( st == 0 ) {
|
3039
3047
|
/* would block -> wait for readable data */
|
3040
|
-
|
3048
|
+
pg_rb_io_wait(socket_io, RB_INT2NUM(PG_RUBY_IO_READABLE), Qnil);
|
3041
3049
|
if ( PQconsumeInput(conn) == 0 ) {
|
3042
3050
|
pgconn_close_socket_io(self);
|
3043
3051
|
return Qfalse;
|
@@ -3076,6 +3084,7 @@ pgconn_discard_results(VALUE self)
|
|
3076
3084
|
* #exec is an alias for #async_exec which is almost identical to #sync_exec .
|
3077
3085
|
* #sync_exec is implemented on the simpler synchronous command processing API of libpq, whereas
|
3078
3086
|
* #async_exec is implemented on the asynchronous API and on ruby's IO mechanisms.
|
3087
|
+
* Only #async_exec is compatible to <tt>Fiber.scheduler</tt> based asynchronous IO processing introduced in ruby-3.0.
|
3079
3088
|
* Both methods ensure that other threads can process while waiting for the server to
|
3080
3089
|
* complete the request, but #sync_exec blocks all signals to be processed until the query is finished.
|
3081
3090
|
* This is most notably visible by a delayed reaction to Control+C.
|
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
CHANGED
Binary file
|
data/lib/pg/connection.rb
CHANGED
@@ -21,6 +21,13 @@ require 'socket'
|
|
21
21
|
#
|
22
22
|
# See the PG::Result class for information on working with the results of a query.
|
23
23
|
#
|
24
|
+
# Many methods of this class have three variants kind of:
|
25
|
+
# 1. #exec - the base method which is an alias to #async_exec .
|
26
|
+
# This is the method that should be used in general.
|
27
|
+
# 2. #async_exec - the async aware version of the method, implemented by libpq's async API.
|
28
|
+
# 3. #sync_exec - the method version that is implemented by blocking function(s) of libpq.
|
29
|
+
#
|
30
|
+
# Sync and async version of the method can be switched by Connection.async_api= , however it is not recommended to change the default.
|
24
31
|
class PG::Connection
|
25
32
|
|
26
33
|
# The order the options are passed to the ::connect method.
|
@@ -690,7 +697,7 @@ class PG::Connection
|
|
690
697
|
#
|
691
698
|
# Raises a PG::Error if the connection fails.
|
692
699
|
def new(*args, **kwargs)
|
693
|
-
conn =
|
700
|
+
conn = self.connect_start(*args, **kwargs ) or
|
694
701
|
raise(PG::Error, "Unable to create a new connection")
|
695
702
|
|
696
703
|
raise(PG::ConnectionBad, conn.error_message) if conn.status == PG::CONNECTION_BAD
|
data/lib/pg/version.rb
CHANGED
data/lib/pg.rb
CHANGED
data/lib/x86-mingw32/libpq.dll
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.0.
|
4
|
+
version: 1.3.0.rc3
|
5
5
|
platform: x86-mingw32
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -36,7 +36,7 @@ cert_chain:
|
|
36
36
|
d5T9wAD7jW/0seVujw+76/YOJWO3Dft+FQmMBbdd8s3J47HbN9R2mDt6fl6he+X/
|
37
37
|
gw==
|
38
38
|
-----END CERTIFICATE-----
|
39
|
-
date: 2022-01-
|
39
|
+
date: 2022-01-13 00:00:00.000000000 Z
|
40
40
|
dependencies: []
|
41
41
|
description: Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL
|
42
42
|
9.3 and later.
|
metadata.gz.sig
CHANGED
Binary file
|