pg 1.3.0.rc3 → 1.3.0.rc4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/binary-gems.yml +1 -0
- data/.github/workflows/source-gem.yml +1 -0
- data/ext/extconf.rb +1 -0
- data/ext/pg_connection.c +103 -1
- data/ext/pg_record_coder.c +1 -1
- data/lib/pg/connection.rb +1 -1
- data/lib/pg/version.rb +1 -1
- 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: bf8c6b28717437791e0d47d845fdb37ac3a9b14c4e3232e9fec07644b432e7fe
|
4
|
+
data.tar.gz: 0a3d2152bf57cae7f683d31d7d30b12f1ad80bdcb4e7ce033585e3652936b94a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1233307dea19764f159f5488bd0ba0effb3616d6b07c9b17825723e1a55ac06fb6563397cf721a6046a33341b71a6bea9a47fddd331fa8c13ff88caeb02ef8fe
|
7
|
+
data.tar.gz: bd63e3db1d04cbc8108b1319e0458a660eea0f3ca9b5221217d226f950ca8af6cdd8c12845c142adb5f77fd2d18f86bf6441a4afe830a6499c9fc4464a5e3d94
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -79,6 +79,7 @@ jobs:
|
|
79
79
|
echo "PGUSER=$env:USERNAME" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
80
80
|
echo "PGPASSWORD=" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
81
81
|
|
82
|
+
- run: gem update --system
|
82
83
|
- run: bundle install
|
83
84
|
- run: gem install --local pg-*${{ matrix.platform }}.gem --verbose
|
84
85
|
- name: Run specs
|
data/ext/extconf.rb
CHANGED
@@ -155,6 +155,7 @@ have_func 'rb_io_wait' # since ruby-3.0
|
|
155
155
|
# unistd.h confilicts with ruby/win32.h when cross compiling for win32 and ruby 1.9.1
|
156
156
|
have_header 'unistd.h'
|
157
157
|
have_header 'inttypes.h'
|
158
|
+
have_header('ruby/fiber/scheduler.h') if RUBY_PLATFORM=~/mingw|mswin/
|
158
159
|
|
159
160
|
checking_for "C99 variable length arrays" do
|
160
161
|
$defs.push( "-DHAVE_VARIABLE_LENGTH_ARRAYS" ) if try_compile('void test_vla(int l){ int vla[l]; }')
|
data/ext/pg_connection.c
CHANGED
@@ -2207,8 +2207,110 @@ pgconn_notifies(VALUE self)
|
|
2207
2207
|
return hash;
|
2208
2208
|
}
|
2209
2209
|
|
2210
|
+
#if defined(_WIN32)
|
2211
|
+
|
2212
|
+
/* We use a specialized implementation of rb_io_wait() on Windows.
|
2213
|
+
* This is because rb_io_wait() and rb_wait_for_single_fd() are very slow on Windows.
|
2214
|
+
*/
|
2215
|
+
|
2216
|
+
#if defined(HAVE_RUBY_FIBER_SCHEDULER_H)
|
2217
|
+
#include <ruby/fiber/scheduler.h>
|
2218
|
+
#endif
|
2219
|
+
|
2220
|
+
typedef enum {
|
2221
|
+
PG_RUBY_IO_READABLE = RB_WAITFD_IN,
|
2222
|
+
PG_RUBY_IO_WRITABLE = RB_WAITFD_OUT,
|
2223
|
+
PG_RUBY_IO_PRIORITY = RB_WAITFD_PRI,
|
2224
|
+
} pg_rb_io_event_t;
|
2225
|
+
|
2226
|
+
int rb_w32_wait_events( HANDLE *events, int num, DWORD timeout );
|
2227
|
+
|
2228
|
+
static VALUE
|
2229
|
+
pg_rb_thread_io_wait(VALUE io, VALUE events, VALUE timeout) {
|
2230
|
+
rb_io_t *fptr;
|
2231
|
+
struct timeval ptimeout;
|
2232
|
+
|
2233
|
+
struct timeval aborttime={0,0}, currtime, waittime;
|
2234
|
+
DWORD timeout_milisec = INFINITE;
|
2235
|
+
HANDLE hEvent = WSACreateEvent();
|
2236
|
+
|
2237
|
+
long rb_events = NUM2UINT(events);
|
2238
|
+
long w32_events = 0;
|
2239
|
+
DWORD wait_ret;
|
2240
|
+
|
2241
|
+
GetOpenFile((io), fptr);
|
2242
|
+
if( !NIL_P(timeout) ){
|
2243
|
+
ptimeout.tv_sec = (time_t)(NUM2DBL(timeout));
|
2244
|
+
ptimeout.tv_usec = (time_t)(NUM2DBL(timeout) - (double)ptimeout.tv_sec);
|
2245
|
+
|
2246
|
+
gettimeofday(&currtime, NULL);
|
2247
|
+
timeradd(&currtime, &ptimeout, &aborttime);
|
2248
|
+
}
|
2249
|
+
|
2250
|
+
if(rb_events & PG_RUBY_IO_READABLE) {
|
2251
|
+
w32_events |= FD_READ | FD_ACCEPT | FD_CLOSE;
|
2252
|
+
} else if(rb_events & PG_RUBY_IO_WRITABLE) {
|
2253
|
+
w32_events |= FD_WRITE | FD_CONNECT;
|
2254
|
+
} else if(rb_events & PG_RUBY_IO_PRIORITY) {
|
2255
|
+
w32_events |= FD_OOB;
|
2256
|
+
}
|
2257
|
+
|
2258
|
+
for(;;) {
|
2259
|
+
if ( WSAEventSelect(_get_osfhandle(fptr->fd), hEvent, w32_events) == SOCKET_ERROR ) {
|
2260
|
+
WSACloseEvent( hEvent );
|
2261
|
+
rb_raise( rb_eConnectionBad, "WSAEventSelect socket error: %d", WSAGetLastError() );
|
2262
|
+
}
|
2263
|
+
|
2264
|
+
if ( !NIL_P(timeout) ) {
|
2265
|
+
gettimeofday(&currtime, NULL);
|
2266
|
+
timersub(&aborttime, &currtime, &waittime);
|
2267
|
+
timeout_milisec = (DWORD)( waittime.tv_sec * 1e3 + waittime.tv_usec / 1e3 );
|
2268
|
+
}
|
2269
|
+
|
2270
|
+
if( NIL_P(timeout) || (waittime.tv_sec >= 0 && waittime.tv_usec >= 0) ){
|
2271
|
+
/* Wait for the socket to become readable before checking again */
|
2272
|
+
wait_ret = rb_w32_wait_events( &hEvent, 1, timeout_milisec );
|
2273
|
+
} else {
|
2274
|
+
wait_ret = WAIT_TIMEOUT;
|
2275
|
+
}
|
2276
|
+
|
2277
|
+
if ( wait_ret == WAIT_TIMEOUT ) {
|
2278
|
+
WSACloseEvent( hEvent );
|
2279
|
+
return UINT2NUM(0);
|
2280
|
+
} else if ( wait_ret == WAIT_OBJECT_0 ) {
|
2281
|
+
WSACloseEvent( hEvent );
|
2282
|
+
/* The event we were waiting for. */
|
2283
|
+
return UINT2NUM(rb_events);
|
2284
|
+
} else if ( wait_ret == WAIT_OBJECT_0 + 1) {
|
2285
|
+
/* This indicates interruption from timer thread, GC, exception
|
2286
|
+
* from other threads etc... */
|
2287
|
+
rb_thread_check_ints();
|
2288
|
+
} else if ( wait_ret == WAIT_FAILED ) {
|
2289
|
+
WSACloseEvent( hEvent );
|
2290
|
+
rb_raise( rb_eConnectionBad, "Wait on socket error (WaitForMultipleObjects): %lu", GetLastError() );
|
2291
|
+
} else {
|
2292
|
+
WSACloseEvent( hEvent );
|
2293
|
+
rb_raise( rb_eConnectionBad, "Wait on socket abandoned (WaitForMultipleObjects)" );
|
2294
|
+
}
|
2295
|
+
}
|
2296
|
+
}
|
2297
|
+
|
2298
|
+
static VALUE
|
2299
|
+
pg_rb_io_wait(VALUE io, VALUE events, VALUE timeout) {
|
2300
|
+
#if defined(HAVE_RUBY_FIBER_SCHEDULER_H)
|
2301
|
+
/* We don't support Fiber.scheduler on Windows ruby-3.0 because there is no fast way to check whether a scheduler is active.
|
2302
|
+
* Fortunatelly ruby-3.1 offers a C-API for it.
|
2303
|
+
*/
|
2304
|
+
VALUE scheduler = rb_fiber_scheduler_current();
|
2305
|
+
|
2306
|
+
if (!NIL_P(scheduler)) {
|
2307
|
+
return rb_io_wait(io, events, timeout);
|
2308
|
+
}
|
2309
|
+
#endif
|
2310
|
+
return pg_rb_thread_io_wait(io, events, timeout);
|
2311
|
+
}
|
2210
2312
|
|
2211
|
-
#
|
2313
|
+
#elif defined(HAVE_RB_IO_WAIT)
|
2212
2314
|
|
2213
2315
|
/* Use our own function and constants names, to avoid conflicts with truffleruby-head on its road to ruby-3.0 compatibility. */
|
2214
2316
|
#define pg_rb_io_wait rb_io_wait
|
data/ext/pg_record_coder.c
CHANGED
@@ -134,7 +134,7 @@ pg_recordcoder_type_map_get(VALUE self)
|
|
134
134
|
* tm = PG::TypeMapByColumn.new([PG::TextEncoder::Float.new]*2)
|
135
135
|
* # Use this type map to encode the record:
|
136
136
|
* PG::TextEncoder::Record.new(type_map: tm).encode([1,2])
|
137
|
-
* # => "(\"1.
|
137
|
+
* # => "(\"1.0\",\"2.0\")"
|
138
138
|
*
|
139
139
|
* Records can also be encoded and decoded directly to and from the database.
|
140
140
|
* This avoids intermediate string allocations and is very fast.
|
data/lib/pg/connection.rb
CHANGED
@@ -7,7 +7,7 @@ require 'io/wait'
|
|
7
7
|
require 'socket'
|
8
8
|
|
9
9
|
# The PostgreSQL connection class. The interface for this class is based on
|
10
|
-
# {libpq}[http://www.postgresql.org/docs/
|
10
|
+
# {libpq}[http://www.postgresql.org/docs/current/libpq.html], the C
|
11
11
|
# application programmer's interface to PostgreSQL. Some familiarity with libpq
|
12
12
|
# is recommended, but not necessary.
|
13
13
|
#
|
data/lib/pg/version.rb
CHANGED
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.rc4
|
5
5
|
platform: ruby
|
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-22 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
|