pg 1.3.0-x64-mingw32 → 1.3.4-x64-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/.appveyor.yml +1 -1
- data/.github/workflows/binary-gems.yml +3 -3
- data/.github/workflows/source-gem.yml +5 -6
- data/History.rdoc +55 -1
- data/Rakefile.cross +3 -1
- data/certs/larskanis-2022.pem +26 -0
- data/ext/errorcodes.rb +0 -0
- data/ext/extconf.rb +13 -10
- data/ext/pg.h +1 -0
- data/ext/pg_connection.c +11 -26
- data/ext/pg_result.c +15 -9
- data/ext/pg_tuple.c +2 -8
- data/ext/pg_type_map_all_strings.c +1 -0
- data/ext/pg_type_map_by_column.c +2 -0
- 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/pg/connection.rb +11 -9
- data/lib/pg/version.rb +1 -1
- data/lib/pg.rb +7 -5
- data/lib/x64-mingw32/libpq.dll +0 -0
- data/misc/openssl-pg-segfault.rb +0 -0
- data/rakelib/task_extension.rb +46 -0
- data/sample/array_insert.rb +0 -0
- data/sample/async_api.rb +3 -7
- data/sample/async_copyto.rb +0 -0
- data/sample/async_mixed.rb +0 -0
- data/sample/check_conn.rb +0 -0
- data/sample/copydata.rb +0 -0
- data/sample/copyfrom.rb +0 -0
- data/sample/copyto.rb +0 -0
- data/sample/cursor.rb +0 -0
- data/sample/disk_usage_report.rb +0 -0
- data/sample/issue-119.rb +0 -0
- data/sample/losample.rb +0 -0
- data/sample/minimal-testcase.rb +0 -0
- data/sample/notify_wait.rb +0 -0
- data/sample/pg_statistics.rb +0 -0
- data/sample/replication_monitor.rb +0 -0
- data/sample/test_binary_values.rb +0 -0
- data/sample/wal_shipper.rb +0 -0
- data/sample/warehouse_partitions.rb +0 -0
- data.tar.gz.sig +1 -1
- metadata +29 -25
- 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: 1981a4769812c249e6947ba779c35c0676ebf209336b11454bca586c143c4614
|
4
|
+
data.tar.gz: 8a3c4cc4583b858054640d5174beffc9ba723740343304d69ec2fcf0eaba7baa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6dca120d41d0c07ae7994b5098f74aaf04057effdd8a5362605a7dcfd7056ce7dcdb5b6dd36677cb7b504ec7527ce147dc15f7b757eab10b8367de3eb17c337d
|
7
|
+
data.tar.gz: ea12c4f6f73f0b6ce4e61bffdd47ebf5baf9e74fb7cff961db76d5a424211ffc50b16571531737ad44c2d6b87e920b7a4f508f5f186c0d404572c8998195a1c3
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/.appveyor.yml
CHANGED
@@ -45,10 +45,10 @@ jobs:
|
|
45
45
|
include:
|
46
46
|
- ruby: "3.1"
|
47
47
|
platform: "x64-mingw-ucrt"
|
48
|
-
PGVERSION: 14.
|
48
|
+
PGVERSION: 14.2-1-windows-x64
|
49
49
|
- ruby: "2.5"
|
50
50
|
platform: "x64-mingw32"
|
51
|
-
PGVERSION: 10.
|
51
|
+
PGVERSION: 10.20-1-windows
|
52
52
|
|
53
53
|
runs-on: windows-latest
|
54
54
|
env:
|
@@ -56,7 +56,7 @@ jobs:
|
|
56
56
|
steps:
|
57
57
|
- uses: actions/checkout@v2
|
58
58
|
- name: Set up Ruby
|
59
|
-
uses:
|
59
|
+
uses: ruby/setup-ruby@v1
|
60
60
|
with:
|
61
61
|
ruby-version: ${{ matrix.ruby }}
|
62
62
|
|
@@ -31,12 +31,12 @@ jobs:
|
|
31
31
|
include:
|
32
32
|
- os: windows
|
33
33
|
ruby: "head"
|
34
|
-
PGVERSION: 14.
|
34
|
+
PGVERSION: 14.2-1-windows-x64
|
35
35
|
PGVER: "14"
|
36
36
|
- os: windows
|
37
37
|
ruby: "2.5"
|
38
|
-
PGVERSION: 9.
|
39
|
-
PGVER: "9.
|
38
|
+
PGVERSION: 9.4.26-1-windows-x64
|
39
|
+
PGVER: "9.4"
|
40
40
|
- os: ubuntu
|
41
41
|
ruby: "head"
|
42
42
|
PGVER: "14"
|
@@ -54,7 +54,7 @@ jobs:
|
|
54
54
|
PGVER: "14"
|
55
55
|
- os: macos
|
56
56
|
ruby: "head"
|
57
|
-
PGVERSION: 14.
|
57
|
+
PGVERSION: 14.2-1-osx
|
58
58
|
PGVER: "14"
|
59
59
|
|
60
60
|
runs-on: ${{ matrix.os }}-latest
|
@@ -65,7 +65,7 @@ jobs:
|
|
65
65
|
steps:
|
66
66
|
- uses: actions/checkout@v2
|
67
67
|
- name: Set up Ruby
|
68
|
-
uses:
|
68
|
+
uses: ruby/setup-ruby@v1
|
69
69
|
with:
|
70
70
|
ruby-version: ${{ matrix.ruby }}
|
71
71
|
|
@@ -116,7 +116,6 @@ jobs:
|
|
116
116
|
- run: gem install --local *.gem --verbose
|
117
117
|
|
118
118
|
- name: Run specs
|
119
|
-
continue-on-error: ${{ matrix.ruby == 'truffleruby-head' }}
|
120
119
|
env:
|
121
120
|
PG_DEBUG: 0
|
122
121
|
run: ruby -rpg -S rspec spec/**/*_spec.rb -cfdoc
|
data/History.rdoc
CHANGED
@@ -1,3 +1,56 @@
|
|
1
|
+
== v1.3.4 [2022-03-10] Lars Kanis <lars@greiz-reinsdorf.de>
|
2
|
+
|
3
|
+
Bugfixes:
|
4
|
+
|
5
|
+
- Don't leak IO in case of connection errors. #439
|
6
|
+
Previously it was kept open until the PG::Connection was garbage collected.
|
7
|
+
- Fix a performance regession in conn.get_result noticed in single row mode. #442
|
8
|
+
- Fix occasional error Errno::EBADF (Bad file descriptor) while connecting. #444
|
9
|
+
- Fix compatibility of res.stream_each* methods with Fiber.scheduler. #446
|
10
|
+
- Remove FL_TEST and FL_SET, which are MRI-internal. #437
|
11
|
+
|
12
|
+
Enhancements:
|
13
|
+
|
14
|
+
- Allow pgresult_stream_any to be used by sequel_pg. #443
|
15
|
+
|
16
|
+
|
17
|
+
== v1.3.3 [2022-02-22] Lars Kanis <lars@greiz-reinsdorf.de>
|
18
|
+
|
19
|
+
Bugfixes:
|
20
|
+
|
21
|
+
- Fix omission of the third digit of IPv4 addresses in connection URI. #435
|
22
|
+
- Fix wrong permission of certs/larskanis-2022.pem in the pg-1.3.2.gem. #432
|
23
|
+
|
24
|
+
|
25
|
+
== v1.3.2 [2022-02-14] Lars Kanis <lars@greiz-reinsdorf.de>
|
26
|
+
|
27
|
+
Bugfixes:
|
28
|
+
|
29
|
+
- Cancel only active query after failing transaction. #430
|
30
|
+
This avoids an incompatibility with pgbouncer since pg-1.3.0.
|
31
|
+
- Fix String objects with non-applied encoding when using COPY or record decoders. #427
|
32
|
+
- Update Windows fat binary gem to PostgreSQL-14.2.
|
33
|
+
|
34
|
+
Enhancements:
|
35
|
+
|
36
|
+
- Improve extconf.rb checks to reduces the number of compiler calls.
|
37
|
+
- Add a check for PGRES_PIPELINE_SYNC, to make sure the library version and the header files are PostgreSQL-14+. #429
|
38
|
+
|
39
|
+
|
40
|
+
== v1.3.1 [2022-02-01] Michael Granger <ged@FaerieMUD.org>
|
41
|
+
|
42
|
+
Bugfixes:
|
43
|
+
|
44
|
+
- Fix wrong handling of socket writability on Windows introduced in #417.
|
45
|
+
This caused starvation in conn.put_copy_data.
|
46
|
+
- Fix error in PG.version_string(true). #419
|
47
|
+
- Fix a regression in pg 1.3.0 where Ruby 2.x busy-looping any fractional seconds for every wait. #420
|
48
|
+
|
49
|
+
Enhancements:
|
50
|
+
|
51
|
+
- Raise an error when conn.copy_data is used in nonblocking mode.
|
52
|
+
|
53
|
+
|
1
54
|
== v1.3.0 [2022-01-20] Michael Granger <ged@FaerieMUD.org>
|
2
55
|
|
3
56
|
Install Enhancements:
|
@@ -26,7 +79,7 @@ API Enhancements:
|
|
26
79
|
- Run Connection.ping in a second thread.
|
27
80
|
- Make discard_results scheduler friendly
|
28
81
|
- Do all socket waiting through the conn.socket_io object.
|
29
|
-
- Avoid PG.connect blocking while address resolution by automatically providing the +hostaddr+ parameter.
|
82
|
+
- Avoid PG.connect blocking while address resolution by automatically providing the +hostaddr+ parameter and resolving in Ruby instead of libpq.
|
30
83
|
- On Windows Fiber.scheduler support requires Ruby-3.1+.
|
31
84
|
It is also only partly usable since may ruby IO methods are not yet scheduler aware on Windows.
|
32
85
|
- Add support for pipeline mode of PostgreSQL-14. #401
|
@@ -65,6 +118,7 @@ Deprecated:
|
|
65
118
|
Removed:
|
66
119
|
- Remove support of ruby-2.2, 2.3 and 2.4. Minimum is ruby-2.5 now.
|
67
120
|
- Remove support for PostgreSQL-9.2. Minimum is PostgreSQL-9.3 now.
|
121
|
+
- Remove constant PG::REVISION, which was broken since pg-1.1.4.
|
68
122
|
|
69
123
|
Repository:
|
70
124
|
- Replace Hoe by Bundler for gem packaging
|
data/Rakefile.cross
CHANGED
@@ -7,6 +7,7 @@ require 'rake/clean'
|
|
7
7
|
require 'rake/extensiontask'
|
8
8
|
require 'rake/extensioncompiler'
|
9
9
|
require 'ostruct'
|
10
|
+
require_relative 'rakelib/task_extension'
|
10
11
|
|
11
12
|
MISCDIR = BASEDIR + 'misc'
|
12
13
|
|
@@ -20,6 +21,7 @@ end
|
|
20
21
|
|
21
22
|
class CrossLibrary < OpenStruct
|
22
23
|
include Rake::DSL
|
24
|
+
prepend TaskExtension
|
23
25
|
|
24
26
|
def initialize(for_platform, openssl_config, toolchain)
|
25
27
|
super()
|
@@ -30,7 +32,7 @@ class CrossLibrary < OpenStruct
|
|
30
32
|
|
31
33
|
# Cross-compilation constants
|
32
34
|
self.openssl_version = ENV['OPENSSL_VERSION'] || '1.1.1m'
|
33
|
-
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '14.
|
35
|
+
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '14.2'
|
34
36
|
|
35
37
|
# Check if symlinks work in the current working directory.
|
36
38
|
# This fails, if rake-compiler-dock is running on a Windows box.
|
@@ -0,0 +1,26 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIETTCCArWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
3
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yMjAyMTQxMzMwNTZaFw0yMzAy
|
4
|
+
MTQxMzMwNTZaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
5
|
+
PWRlMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwum6Y1KznfpzXOT/
|
6
|
+
mZgJTBbxZuuZF49Fq3K0WA67YBzNlDv95qzSp7V/7Ek3NCcnT7G+2kSuhNo1FhdN
|
7
|
+
eSDO/moYebZNAcu3iqLsuzuULXPLuoU0GsMnVMqV9DZPh7cQHE5EBZ7hlzDBK7k/
|
8
|
+
8nBMvR0mHo77kIkapHc26UzVq/G0nKLfDsIHXVylto3PjzOumjG6GhmFN4r3cP6e
|
9
|
+
SDfl1FSeRYVpt4kmQULz/zdSaOH3AjAq7PM2Z91iGwQvoUXMANH2v89OWjQO/NHe
|
10
|
+
JMNDFsmHK/6Ji4Kk48Z3TyscHQnipAID5GhS1oD21/WePdj7GhmbF5gBzkV5uepd
|
11
|
+
eJQPgWGwrQW/Z2oPjRuJrRofzWfrMWqbOahj9uth6WSxhNexUtbjk6P8emmXOJi5
|
12
|
+
chQPnWX+N3Gj+jjYxqTFdwT7Mj3pv1VHa+aNUbqSPpvJeDyxRIuo9hvzDaBHb/Cg
|
13
|
+
9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjgYEwfzAJ
|
14
|
+
BgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUOIdbSMr3VFrTCO9/cTM0
|
15
|
+
0exHzBcwIgYDVR0RBBswGYEXbGFyc0BncmVpei1yZWluc2RvcmYuZGUwIgYDVR0S
|
16
|
+
BBswGYEXbGFyc0BncmVpei1yZWluc2RvcmYuZGUwDQYJKoZIhvcNAQELBQADggGB
|
17
|
+
AFWP7F/y3Oq3NgrqUOnjKOeDaBa7AqNhHS+PZg+C90lnJzMgOs4KKgZYxqSQVSab
|
18
|
+
SCEmzIO/StkXY4NpJ4fYLrHemf/fJy1wPyu+fNdp5SEEUwEo+2toRFlzTe4u4LdS
|
19
|
+
QC636nPPTMt8H3xz2wf/lUIUeo2Qc95Qt2BQM465ibbG9kmA3c7Sopx6yOabYOAl
|
20
|
+
KPRbOSEPiWYcF9Suuz8Gdf8jxEtPlnZiwRvnYJ+IHMq3XQCJWPpMzdDMbtlgHbXE
|
21
|
+
vq1zOTLMSYAS0UB3uionR4yo1hLz60odwkCm7qf0o2Ci/5OjtB0a89VuyqRU2vUJ
|
22
|
+
QH95WBjDJ6lCCW7J0mrMPnJQSUFTmufsU6jOChvPaCeAzW1YwrsP/YKnvwueG7ip
|
23
|
+
VOdW6RitjtFxhS7evRL0201+KUvLz12zZWWjOcujlQs64QprxOtiv/MiisKb1Ng+
|
24
|
+
oL1mUdzB8KrZL4/WbG5YNX6UTtJbIOu9qEFbBAy4/jtIkJX+dlNoFwd4GXQW1YNO
|
25
|
+
nA==
|
26
|
+
-----END CERTIFICATE-----
|
data/ext/errorcodes.rb
CHANGED
File without changes
|
data/ext/extconf.rb
CHANGED
@@ -37,12 +37,12 @@ else
|
|
37
37
|
|
38
38
|
if pgconfig && pgconfig != 'ignore'
|
39
39
|
$stderr.puts "Using config values from %s" % [ pgconfig ]
|
40
|
-
incdir =
|
41
|
-
libdir =
|
40
|
+
incdir = IO.popen([pgconfig, "--includedir"], &:read).chomp
|
41
|
+
libdir = IO.popen([pgconfig, "--libdir"], &:read).chomp
|
42
42
|
dir_config 'pg', incdir, libdir
|
43
43
|
|
44
44
|
# Windows traditionally stores DLLs beside executables, not in libdir
|
45
|
-
dlldir = RUBY_PLATFORM=~/mingw|mswin/ ?
|
45
|
+
dlldir = RUBY_PLATFORM=~/mingw|mswin/ ? IO.popen([pgconfig, "--bindir"], &:read).chomp : libdir
|
46
46
|
|
47
47
|
elsif checking_for "libpq per pkg-config" do
|
48
48
|
_cflags, ldflags, _libs = pkg_config("libpq")
|
@@ -87,7 +87,7 @@ begin
|
|
87
87
|
have_library( 'libpq', 'PQconnectdb', ['libpq-fe.h'] ) ||
|
88
88
|
have_library( 'ms/libpq', 'PQconnectdb', ['libpq-fe.h'] )
|
89
89
|
|
90
|
-
rescue SystemExit
|
90
|
+
rescue SystemExit
|
91
91
|
install_text = case RUBY_PLATFORM
|
92
92
|
when /linux/
|
93
93
|
<<-EOT
|
@@ -138,15 +138,18 @@ if /mingw/ =~ RUBY_PLATFORM && RbConfig::MAKEFILE_CONFIG['CC'] =~ /gcc/
|
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
141
|
-
have_func 'PQconninfo' or
|
141
|
+
have_func 'PQconninfo', 'libpq-fe.h' or
|
142
142
|
abort "Your PostgreSQL is too old. Either install an older version " +
|
143
143
|
"of this gem or upgrade your database to at least PostgreSQL-9.3."
|
144
144
|
# optional headers/functions
|
145
|
-
have_func 'PQsslAttribute' # since PostgreSQL-9.5
|
146
|
-
have_func 'PQresultVerboseErrorMessage' # since PostgreSQL-9.6
|
147
|
-
have_func 'PQencryptPasswordConn' # since PostgreSQL-10
|
148
|
-
have_func 'PQresultMemorySize' # since PostgreSQL-12
|
149
|
-
have_func 'PQenterPipelineMode' # since PostgreSQL-14
|
145
|
+
have_func 'PQsslAttribute', 'libpq-fe.h' # since PostgreSQL-9.5
|
146
|
+
have_func 'PQresultVerboseErrorMessage', 'libpq-fe.h' # since PostgreSQL-9.6
|
147
|
+
have_func 'PQencryptPasswordConn', 'libpq-fe.h' # since PostgreSQL-10
|
148
|
+
have_func 'PQresultMemorySize', 'libpq-fe.h' # since PostgreSQL-12
|
149
|
+
have_func 'PQenterPipelineMode', 'libpq-fe.h' do |src| # since PostgreSQL-14
|
150
|
+
# Ensure header files fit as well
|
151
|
+
src + " int con(){ return PGRES_PIPELINE_SYNC; }"
|
152
|
+
end
|
150
153
|
have_func 'timegm'
|
151
154
|
have_func 'rb_gc_adjust_memory_usage' # since ruby-2.4
|
152
155
|
have_func 'rb_gc_mark_movable' # since ruby-2.7
|
data/ext/pg.h
CHANGED
@@ -344,6 +344,7 @@ void pg_typemap_compact _(( void * ));
|
|
344
344
|
|
345
345
|
PGconn *pg_get_pgconn _(( VALUE ));
|
346
346
|
t_pg_connection *pg_get_connection _(( VALUE ));
|
347
|
+
VALUE pgconn_block _(( int, VALUE *, VALUE ));
|
347
348
|
|
348
349
|
VALUE pg_new_result _(( PGresult *, VALUE ));
|
349
350
|
VALUE pg_new_result_autoclear _(( PGresult *, VALUE ));
|
data/ext/pg_connection.c
CHANGED
@@ -475,9 +475,7 @@ pgconn_connect_poll(VALUE self)
|
|
475
475
|
PostgresPollingStatusType status;
|
476
476
|
status = gvl_PQconnectPoll(pg_get_pgconn(self));
|
477
477
|
|
478
|
-
|
479
|
-
pgconn_close_socket_io(self);
|
480
|
-
}
|
478
|
+
pgconn_close_socket_io(self);
|
481
479
|
|
482
480
|
return INT2FIX((int)status);
|
483
481
|
}
|
@@ -556,9 +554,7 @@ pgconn_reset_poll(VALUE self)
|
|
556
554
|
PostgresPollingStatusType status;
|
557
555
|
status = gvl_PQresetPoll(pg_get_pgconn(self));
|
558
556
|
|
559
|
-
|
560
|
-
pgconn_close_socket_io(self);
|
561
|
-
}
|
557
|
+
pgconn_close_socket_io(self);
|
562
558
|
|
563
559
|
return INT2FIX((int)status);
|
564
560
|
}
|
@@ -2241,19 +2237,15 @@ pg_rb_thread_io_wait(VALUE io, VALUE events, VALUE timeout) {
|
|
2241
2237
|
GetOpenFile((io), fptr);
|
2242
2238
|
if( !NIL_P(timeout) ){
|
2243
2239
|
ptimeout.tv_sec = (time_t)(NUM2DBL(timeout));
|
2244
|
-
ptimeout.tv_usec = (time_t)(NUM2DBL(timeout) - (double)ptimeout.tv_sec);
|
2240
|
+
ptimeout.tv_usec = (time_t)((NUM2DBL(timeout) - (double)ptimeout.tv_sec) * 1e6);
|
2245
2241
|
|
2246
2242
|
gettimeofday(&currtime, NULL);
|
2247
2243
|
timeradd(&currtime, &ptimeout, &aborttime);
|
2248
2244
|
}
|
2249
2245
|
|
2250
|
-
if(rb_events & PG_RUBY_IO_READABLE)
|
2251
|
-
|
2252
|
-
|
2253
|
-
w32_events |= FD_WRITE | FD_CONNECT;
|
2254
|
-
} else if(rb_events & PG_RUBY_IO_PRIORITY) {
|
2255
|
-
w32_events |= FD_OOB;
|
2256
|
-
}
|
2246
|
+
if(rb_events & PG_RUBY_IO_READABLE) w32_events |= FD_READ | FD_ACCEPT | FD_CLOSE;
|
2247
|
+
if(rb_events & PG_RUBY_IO_WRITABLE) w32_events |= FD_WRITE | FD_CONNECT;
|
2248
|
+
if(rb_events & PG_RUBY_IO_PRIORITY) w32_events |= FD_OOB;
|
2257
2249
|
|
2258
2250
|
for(;;) {
|
2259
2251
|
if ( WSAEventSelect(_get_osfhandle(fptr->fd), hEvent, w32_events) == SOCKET_ERROR ) {
|
@@ -2336,7 +2328,7 @@ pg_rb_io_wait(VALUE io, VALUE events, VALUE timeout) {
|
|
2336
2328
|
GetOpenFile((io), fptr);
|
2337
2329
|
if( !NIL_P(timeout) ){
|
2338
2330
|
waittime.tv_sec = (time_t)(NUM2DBL(timeout));
|
2339
|
-
waittime.tv_usec = (time_t)(NUM2DBL(timeout) - (double)waittime.tv_sec);
|
2331
|
+
waittime.tv_usec = (time_t)((NUM2DBL(timeout) - (double)waittime.tv_sec) * 1e6);
|
2340
2332
|
}
|
2341
2333
|
res = rb_wait_for_single_fd(fptr->fd, NUM2UINT(events), NIL_P(timeout) ? NULL : &waittime);
|
2342
2334
|
|
@@ -2347,21 +2339,12 @@ pg_rb_io_wait(VALUE io, VALUE events, VALUE timeout) {
|
|
2347
2339
|
static void *
|
2348
2340
|
wait_socket_readable( VALUE self, struct timeval *ptimeout, void *(*is_readable)(PGconn *))
|
2349
2341
|
{
|
2350
|
-
VALUE socket_io;
|
2351
2342
|
VALUE ret;
|
2352
2343
|
void *retval;
|
2353
2344
|
struct timeval aborttime={0,0}, currtime, waittime;
|
2354
2345
|
VALUE wait_timeout = Qnil;
|
2355
2346
|
PGconn *conn = pg_get_pgconn(self);
|
2356
2347
|
|
2357
|
-
socket_io = pgconn_socket_io(self);
|
2358
|
-
|
2359
|
-
/* Check for connection errors (PQisBusy is true on connection errors) */
|
2360
|
-
if ( PQconsumeInput(conn) == 0 ) {
|
2361
|
-
pgconn_close_socket_io(self);
|
2362
|
-
rb_raise( rb_eConnectionBad, "PQconsumeInput() %s", PQerrorMessage(conn) );
|
2363
|
-
}
|
2364
|
-
|
2365
2348
|
if ( ptimeout ) {
|
2366
2349
|
gettimeofday(&currtime, NULL);
|
2367
2350
|
timeradd(&currtime, ptimeout, &aborttime);
|
@@ -2376,6 +2359,7 @@ wait_socket_readable( VALUE self, struct timeval *ptimeout, void *(*is_readable)
|
|
2376
2359
|
|
2377
2360
|
/* Is the given timeout valid? */
|
2378
2361
|
if( !ptimeout || (waittime.tv_sec >= 0 && waittime.tv_usec >= 0) ){
|
2362
|
+
VALUE socket_io = pgconn_socket_io(self);
|
2379
2363
|
/* Wait for the socket to become readable before checking again */
|
2380
2364
|
ret = pg_rb_io_wait(socket_io, RB_INT2NUM(PG_RUBY_IO_READABLE), wait_timeout);
|
2381
2365
|
} else {
|
@@ -2988,7 +2972,7 @@ get_result_readable(PGconn *conn)
|
|
2988
2972
|
* If +true+ is returned, +conn.is_busy+ will return +false+
|
2989
2973
|
* and +conn.get_result+ will not block.
|
2990
2974
|
*/
|
2991
|
-
|
2975
|
+
VALUE
|
2992
2976
|
pgconn_block( int argc, VALUE *argv, VALUE self ) {
|
2993
2977
|
struct timeval timeout;
|
2994
2978
|
struct timeval *ptimeout = NULL;
|
@@ -3076,7 +3060,8 @@ pgconn_async_get_last_result(VALUE self)
|
|
3076
3060
|
for(;;) {
|
3077
3061
|
int status;
|
3078
3062
|
|
3079
|
-
|
3063
|
+
/* wait for input (without blocking) before reading each result */
|
3064
|
+
wait_socket_readable(self, NULL, get_result_readable);
|
3080
3065
|
|
3081
3066
|
cur = gvl_PQgetResult(conn);
|
3082
3067
|
if (cur == NULL)
|
data/ext/pg_result.c
CHANGED
@@ -1383,7 +1383,7 @@ pgresult_type_map_get(VALUE self)
|
|
1383
1383
|
|
1384
1384
|
|
1385
1385
|
static void
|
1386
|
-
yield_hash(VALUE self, int ntuples, int nfields)
|
1386
|
+
yield_hash(VALUE self, int ntuples, int nfields, void *data)
|
1387
1387
|
{
|
1388
1388
|
int tuple_num;
|
1389
1389
|
t_pg_result *this = pgresult_get_this(self);
|
@@ -1397,7 +1397,7 @@ yield_hash(VALUE self, int ntuples, int nfields)
|
|
1397
1397
|
}
|
1398
1398
|
|
1399
1399
|
static void
|
1400
|
-
yield_array(VALUE self, int ntuples, int nfields)
|
1400
|
+
yield_array(VALUE self, int ntuples, int nfields, void *data)
|
1401
1401
|
{
|
1402
1402
|
int row;
|
1403
1403
|
t_pg_result *this = pgresult_get_this(self);
|
@@ -1417,7 +1417,7 @@ yield_array(VALUE self, int ntuples, int nfields)
|
|
1417
1417
|
}
|
1418
1418
|
|
1419
1419
|
static void
|
1420
|
-
yield_tuple(VALUE self, int ntuples, int nfields)
|
1420
|
+
yield_tuple(VALUE self, int ntuples, int nfields, void *data)
|
1421
1421
|
{
|
1422
1422
|
int tuple_num;
|
1423
1423
|
t_pg_result *this = pgresult_get_this(self);
|
@@ -1436,8 +1436,9 @@ yield_tuple(VALUE self, int ntuples, int nfields)
|
|
1436
1436
|
}
|
1437
1437
|
}
|
1438
1438
|
|
1439
|
-
static
|
1440
|
-
|
1439
|
+
/* Non-static, and data pointer for use by sequel_pg */
|
1440
|
+
VALUE
|
1441
|
+
pgresult_stream_any(VALUE self, void (*yielder)(VALUE, int, int, void*), void* data)
|
1441
1442
|
{
|
1442
1443
|
t_pg_result *this;
|
1443
1444
|
int nfields;
|
@@ -1465,7 +1466,12 @@ pgresult_stream_any(VALUE self, void (*yielder)(VALUE, int, int))
|
|
1465
1466
|
pg_result_check( self );
|
1466
1467
|
}
|
1467
1468
|
|
1468
|
-
yielder( self, ntuples, nfields );
|
1469
|
+
yielder( self, ntuples, nfields, data );
|
1470
|
+
|
1471
|
+
if( gvl_PQisBusy(pgconn) ){
|
1472
|
+
/* wait for input (without blocking) before reading each result */
|
1473
|
+
pgconn_block( 0, NULL, this->connection );
|
1474
|
+
}
|
1469
1475
|
|
1470
1476
|
pgresult = gvl_PQgetResult(pgconn);
|
1471
1477
|
if( pgresult == NULL )
|
@@ -1516,7 +1522,7 @@ pgresult_stream_any(VALUE self, void (*yielder)(VALUE, int, int))
|
|
1516
1522
|
static VALUE
|
1517
1523
|
pgresult_stream_each(VALUE self)
|
1518
1524
|
{
|
1519
|
-
return pgresult_stream_any(self, yield_hash);
|
1525
|
+
return pgresult_stream_any(self, yield_hash, NULL);
|
1520
1526
|
}
|
1521
1527
|
|
1522
1528
|
/*
|
@@ -1532,7 +1538,7 @@ pgresult_stream_each(VALUE self)
|
|
1532
1538
|
static VALUE
|
1533
1539
|
pgresult_stream_each_row(VALUE self)
|
1534
1540
|
{
|
1535
|
-
return pgresult_stream_any(self, yield_array);
|
1541
|
+
return pgresult_stream_any(self, yield_array, NULL);
|
1536
1542
|
}
|
1537
1543
|
|
1538
1544
|
/*
|
@@ -1549,7 +1555,7 @@ pgresult_stream_each_tuple(VALUE self)
|
|
1549
1555
|
/* allocate VALUEs that are shared between all streamed tuples */
|
1550
1556
|
ensure_init_for_tuple(self);
|
1551
1557
|
|
1552
|
-
return pgresult_stream_any(self, yield_tuple);
|
1558
|
+
return pgresult_stream_any(self, yield_tuple, NULL);
|
1553
1559
|
}
|
1554
1560
|
|
1555
1561
|
/*
|
data/ext/pg_tuple.c
CHANGED
@@ -471,10 +471,7 @@ pg_tuple_dump(VALUE self)
|
|
471
471
|
values = rb_ary_new4(this->num_fields, &this->values[0]);
|
472
472
|
a = rb_ary_new3(2, field_names, values);
|
473
473
|
|
474
|
-
|
475
|
-
rb_copy_generic_ivar(a, self);
|
476
|
-
FL_SET(a, FL_EXIVAR);
|
477
|
-
}
|
474
|
+
rb_copy_generic_ivar(a, self);
|
478
475
|
|
479
476
|
return a;
|
480
477
|
}
|
@@ -542,10 +539,7 @@ pg_tuple_load(VALUE self, VALUE a)
|
|
542
539
|
|
543
540
|
RTYPEDDATA_DATA(self) = this;
|
544
541
|
|
545
|
-
|
546
|
-
rb_copy_generic_ivar(self, a);
|
547
|
-
FL_SET(self, FL_EXIVAR);
|
548
|
-
}
|
542
|
+
rb_copy_generic_ivar(self, a);
|
549
543
|
|
550
544
|
return self;
|
551
545
|
}
|
@@ -76,6 +76,7 @@ pg_tmas_fit_to_copy_get( VALUE self )
|
|
76
76
|
static VALUE
|
77
77
|
pg_tmas_typecast_copy_get( t_typemap *p_typemap, VALUE field_str, int fieldno, int format, int enc_idx )
|
78
78
|
{
|
79
|
+
rb_str_modify(field_str);
|
79
80
|
if( format == 0 ){
|
80
81
|
PG_ENCODING_SET_NOCHECK( field_str, enc_idx );
|
81
82
|
} else {
|
data/ext/pg_type_map_by_column.c
CHANGED
@@ -150,10 +150,12 @@ pg_tmbc_typecast_copy_get( t_typemap *p_typemap, VALUE field_str, int fieldno, i
|
|
150
150
|
|
151
151
|
/* Is it a pure String conversion? Then we can directly send field_str to the user. */
|
152
152
|
if( dec_func == pg_text_dec_string ){
|
153
|
+
rb_str_modify(field_str);
|
153
154
|
PG_ENCODING_SET_NOCHECK( field_str, enc_idx );
|
154
155
|
return field_str;
|
155
156
|
}
|
156
157
|
if( dec_func == pg_bin_dec_bytea ){
|
158
|
+
rb_str_modify(field_str);
|
157
159
|
PG_ENCODING_SET_NOCHECK( field_str, rb_ascii8bit_encindex() );
|
158
160
|
return field_str;
|
159
161
|
}
|
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/pg/connection.rb
CHANGED
@@ -105,7 +105,7 @@ class PG::Connection
|
|
105
105
|
end
|
106
106
|
# extract "host1,host2" from "host1:5432,host2:5432"
|
107
107
|
iopts[:host] = uri_match['hostports'].split(',', -1).map do |hostport|
|
108
|
-
hostmatch = HOST_AND_PORT
|
108
|
+
hostmatch = /\A#{HOST_AND_PORT}\z/.match(hostport)
|
109
109
|
hostmatch['IPv6address'] || hostmatch['IPv4address'] || hostmatch['reg-name']&.gsub(/%(\h\h)/){ $1.hex.chr }
|
110
110
|
end.join(',')
|
111
111
|
oopts = {}
|
@@ -241,6 +241,7 @@ class PG::Connection
|
|
241
241
|
# ["more", "data", "to", "copy"]
|
242
242
|
|
243
243
|
def copy_data( sql, coder=nil )
|
244
|
+
raise PG::NotInBlockingMode, "copy_data can not be used in nonblocking mode" if nonblocking?
|
244
245
|
res = exec( sql )
|
245
246
|
|
246
247
|
case res.result_status
|
@@ -312,7 +313,7 @@ class PG::Connection
|
|
312
313
|
exec "BEGIN"
|
313
314
|
res = yield(self)
|
314
315
|
rescue Exception
|
315
|
-
cancel if transaction_status
|
316
|
+
cancel if transaction_status == PG::PQTRANS_ACTIVE
|
316
317
|
block
|
317
318
|
exec "ROLLBACK"
|
318
319
|
raise
|
@@ -385,7 +386,7 @@ class PG::Connection
|
|
385
386
|
# If the optional code block is given, it will be passed <i>result</i> as an argument,
|
386
387
|
# and the PG::Result object will automatically be cleared when the block terminates.
|
387
388
|
# In this instance, <code>conn.exec</code> returns the value of the block.
|
388
|
-
def get_result
|
389
|
+
def get_result
|
389
390
|
block
|
390
391
|
sync_get_result
|
391
392
|
end
|
@@ -611,9 +612,6 @@ class PG::Connection
|
|
611
612
|
alias async_cancel cancel
|
612
613
|
|
613
614
|
private def async_connect_or_reset(poll_meth)
|
614
|
-
# Now grab a reference to the underlying socket so we know when the connection is established
|
615
|
-
socket = socket_io
|
616
|
-
|
617
615
|
# Track the progress of the connection, waiting for the socket to become readable/writable before polling it
|
618
616
|
poll_status = PG::PGRES_POLLING_WRITING
|
619
617
|
until poll_status == PG::PGRES_POLLING_OK ||
|
@@ -622,18 +620,22 @@ class PG::Connection
|
|
622
620
|
# If the socket needs to read, wait 'til it becomes readable to poll again
|
623
621
|
case poll_status
|
624
622
|
when PG::PGRES_POLLING_READING
|
625
|
-
|
623
|
+
socket_io.wait_readable
|
626
624
|
|
627
625
|
# ...and the same for when the socket needs to write
|
628
626
|
when PG::PGRES_POLLING_WRITING
|
629
|
-
|
627
|
+
socket_io.wait_writable
|
630
628
|
end
|
631
629
|
|
632
630
|
# Check to see if it's finished or failed yet
|
633
631
|
poll_status = send( poll_meth )
|
634
632
|
end
|
635
633
|
|
636
|
-
|
634
|
+
unless status == PG::CONNECTION_OK
|
635
|
+
msg = error_message
|
636
|
+
finish
|
637
|
+
raise PG::ConnectionBad, msg
|
638
|
+
end
|
637
639
|
|
638
640
|
# Set connection to nonblocking to handle all blocking states in ruby.
|
639
641
|
# That way a fiber scheduler is able to handle IO requests.
|
data/lib/pg/version.rb
CHANGED
data/lib/pg.rb
CHANGED
@@ -53,12 +53,14 @@ module PG
|
|
53
53
|
|
54
54
|
class NotAllCopyDataRetrieved < PG::Error
|
55
55
|
end
|
56
|
+
class NotInBlockingMode < PG::Error
|
57
|
+
end
|
56
58
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
return
|
59
|
+
# Get the PG library version.
|
60
|
+
#
|
61
|
+
# +include_buildnum+ is no longer used and any value passed will be ignored.
|
62
|
+
def self::version_string( include_buildnum=nil )
|
63
|
+
return "%s %s" % [ self.name, VERSION ]
|
62
64
|
end
|
63
65
|
|
64
66
|
|
data/lib/x64-mingw32/libpq.dll
CHANGED
Binary file
|
data/misc/openssl-pg-segfault.rb
CHANGED
File without changes
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# This source code is borrowed from:
|
2
|
+
# https://github.com/oneclick/rubyinstaller2/blob/b3dcbf69f131e44c78ea3a1c5e0041c223f266ce/lib/ruby_installer/build/utils.rb#L104-L144
|
3
|
+
|
4
|
+
module TaskExtension
|
5
|
+
# Extend rake's file task to be defined only once and to check the expected file is indeed generated
|
6
|
+
#
|
7
|
+
# The same as #task, but for #file.
|
8
|
+
# In addition this file task raises an error, if the file that is expected to be generated is not present after the block was executed.
|
9
|
+
def file(name, *args, &block)
|
10
|
+
task_once(name, block) do
|
11
|
+
super(name, *args) do |ta|
|
12
|
+
block.call(ta).tap do
|
13
|
+
raise "file #{ta.name} is missing after task executed" unless File.exist?(ta.name)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Extend rake's task definition to be defined only once, even if called several times
|
20
|
+
#
|
21
|
+
# This allows to define common tasks next to specific tasks.
|
22
|
+
# It is expected that any variation of the task's block is reflected in the task name or namespace.
|
23
|
+
# If the task name is identical, the task block is executed only once, even if the file task definition is executed twice.
|
24
|
+
def task(name, *args, &block)
|
25
|
+
task_once(name, block) do
|
26
|
+
super
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private def task_once(name, block)
|
31
|
+
name = name.keys.first if name.is_a?(Hash)
|
32
|
+
if block &&
|
33
|
+
Rake::Task.task_defined?(name) &&
|
34
|
+
Rake::Task[name].instance_variable_get('@task_block_location') == block.source_location
|
35
|
+
# task is already defined for this target and the same block
|
36
|
+
# So skip double definition of the same action
|
37
|
+
Rake::Task[name]
|
38
|
+
elsif block
|
39
|
+
yield.tap do
|
40
|
+
Rake::Task[name].instance_variable_set('@task_block_location', block.source_location)
|
41
|
+
end
|
42
|
+
else
|
43
|
+
yield
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/sample/array_insert.rb
CHANGED
File without changes
|
data/sample/async_api.rb
CHANGED
@@ -27,10 +27,6 @@ conn = PG::Connection.connect_start( :dbname => 'test' ) or
|
|
27
27
|
abort "Connection failed: %s" % [ conn.error_message ] if
|
28
28
|
conn.status == PG::CONNECTION_BAD
|
29
29
|
|
30
|
-
# Now grab a reference to the underlying socket so we know when the
|
31
|
-
# connection is established
|
32
|
-
socket = conn.socket_io
|
33
|
-
|
34
30
|
# Track the progress of the connection, waiting for the socket to become readable/writable
|
35
31
|
# before polling it
|
36
32
|
poll_status = PG::PGRES_POLLING_WRITING
|
@@ -41,13 +37,13 @@ until poll_status == PG::PGRES_POLLING_OK ||
|
|
41
37
|
case poll_status
|
42
38
|
when PG::PGRES_POLLING_READING
|
43
39
|
output_progress " waiting for socket to become readable"
|
44
|
-
select( [
|
40
|
+
select( [conn.socket_io], nil, nil, TIMEOUT ) or
|
45
41
|
raise "Asynchronous connection timed out!"
|
46
42
|
|
47
43
|
# ...and the same for when the socket needs to write
|
48
44
|
when PG::PGRES_POLLING_WRITING
|
49
45
|
output_progress " waiting for socket to become writable"
|
50
|
-
select( nil, [
|
46
|
+
select( nil, [conn.socket_io], nil, TIMEOUT ) or
|
51
47
|
raise "Asynchronous connection timed out!"
|
52
48
|
end
|
53
49
|
|
@@ -85,7 +81,7 @@ loop do
|
|
85
81
|
# Buffer any incoming data on the socket until a full result is ready.
|
86
82
|
conn.consume_input
|
87
83
|
while conn.is_busy
|
88
|
-
select( [
|
84
|
+
select( [conn.socket_io], nil, nil, TIMEOUT ) or
|
89
85
|
raise "Timeout waiting for query response."
|
90
86
|
conn.consume_input
|
91
87
|
end
|
data/sample/async_copyto.rb
CHANGED
File without changes
|
data/sample/async_mixed.rb
CHANGED
File without changes
|
data/sample/check_conn.rb
CHANGED
File without changes
|
data/sample/copydata.rb
CHANGED
File without changes
|
data/sample/copyfrom.rb
CHANGED
File without changes
|
data/sample/copyto.rb
CHANGED
File without changes
|
data/sample/cursor.rb
CHANGED
File without changes
|
data/sample/disk_usage_report.rb
CHANGED
File without changes
|
data/sample/issue-119.rb
CHANGED
File without changes
|
data/sample/losample.rb
CHANGED
File without changes
|
data/sample/minimal-testcase.rb
CHANGED
File without changes
|
data/sample/notify_wait.rb
CHANGED
File without changes
|
data/sample/pg_statistics.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
data/sample/wal_shipper.rb
CHANGED
File without changes
|
File without changes
|
data.tar.gz.sig
CHANGED
@@ -1 +1 @@
|
|
1
|
-
��
|
1
|
+
�/�4�9����gPP�Tz5���>�Z��\"w�\���F��JnWD�:b�c�9z�A����d;����ǚ��ꨕ�cy0�jm���F�J90#p���D1�=)� �?*��Cen�־?��@f�ZX��r�L7�#�ҫ4ysa ��R������m^t&���?�芕�/=ʬ�E{|�F:�=�X�p��m jA�d�\(�������o��ٖ:��C!�GsE6�� ��7��{��E��X�ަ�D5����m��F`�&=\PV#^�Y�֠�*OCq^CȨ�竘|T������z���U:s������G����FvĕE���J�`�x��[Xb�er��T���x��1%�Yg�?P_�[Q��q_�
|
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.
|
4
|
+
version: 1.3.4
|
5
5
|
platform: x64-mingw32
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -11,30 +11,32 @@ bindir: bin
|
|
11
11
|
cert_chain:
|
12
12
|
- |
|
13
13
|
-----BEGIN CERTIFICATE-----
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
14
|
+
MIIETTCCArWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
15
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yMjAyMTQxMzMwNTZaFw0yMzAy
|
16
|
+
MTQxMzMwNTZaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
17
|
+
PWRlMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwum6Y1KznfpzXOT/
|
18
|
+
mZgJTBbxZuuZF49Fq3K0WA67YBzNlDv95qzSp7V/7Ek3NCcnT7G+2kSuhNo1FhdN
|
19
|
+
eSDO/moYebZNAcu3iqLsuzuULXPLuoU0GsMnVMqV9DZPh7cQHE5EBZ7hlzDBK7k/
|
20
|
+
8nBMvR0mHo77kIkapHc26UzVq/G0nKLfDsIHXVylto3PjzOumjG6GhmFN4r3cP6e
|
21
|
+
SDfl1FSeRYVpt4kmQULz/zdSaOH3AjAq7PM2Z91iGwQvoUXMANH2v89OWjQO/NHe
|
22
|
+
JMNDFsmHK/6Ji4Kk48Z3TyscHQnipAID5GhS1oD21/WePdj7GhmbF5gBzkV5uepd
|
23
|
+
eJQPgWGwrQW/Z2oPjRuJrRofzWfrMWqbOahj9uth6WSxhNexUtbjk6P8emmXOJi5
|
24
|
+
chQPnWX+N3Gj+jjYxqTFdwT7Mj3pv1VHa+aNUbqSPpvJeDyxRIuo9hvzDaBHb/Cg
|
25
|
+
9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjgYEwfzAJ
|
26
|
+
BgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUOIdbSMr3VFrTCO9/cTM0
|
27
|
+
0exHzBcwIgYDVR0RBBswGYEXbGFyc0BncmVpei1yZWluc2RvcmYuZGUwIgYDVR0S
|
28
|
+
BBswGYEXbGFyc0BncmVpei1yZWluc2RvcmYuZGUwDQYJKoZIhvcNAQELBQADggGB
|
29
|
+
AFWP7F/y3Oq3NgrqUOnjKOeDaBa7AqNhHS+PZg+C90lnJzMgOs4KKgZYxqSQVSab
|
30
|
+
SCEmzIO/StkXY4NpJ4fYLrHemf/fJy1wPyu+fNdp5SEEUwEo+2toRFlzTe4u4LdS
|
31
|
+
QC636nPPTMt8H3xz2wf/lUIUeo2Qc95Qt2BQM465ibbG9kmA3c7Sopx6yOabYOAl
|
32
|
+
KPRbOSEPiWYcF9Suuz8Gdf8jxEtPlnZiwRvnYJ+IHMq3XQCJWPpMzdDMbtlgHbXE
|
33
|
+
vq1zOTLMSYAS0UB3uionR4yo1hLz60odwkCm7qf0o2Ci/5OjtB0a89VuyqRU2vUJ
|
34
|
+
QH95WBjDJ6lCCW7J0mrMPnJQSUFTmufsU6jOChvPaCeAzW1YwrsP/YKnvwueG7ip
|
35
|
+
VOdW6RitjtFxhS7evRL0201+KUvLz12zZWWjOcujlQs64QprxOtiv/MiisKb1Ng+
|
36
|
+
oL1mUdzB8KrZL4/WbG5YNX6UTtJbIOu9qEFbBAy4/jtIkJX+dlNoFwd4GXQW1YNO
|
37
|
+
nA==
|
36
38
|
-----END CERTIFICATE-----
|
37
|
-
date: 2022-
|
39
|
+
date: 2022-03-10 00:00:00.000000000 Z
|
38
40
|
dependencies: []
|
39
41
|
description: Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL
|
40
42
|
9.3 and later.
|
@@ -71,6 +73,7 @@ files:
|
|
71
73
|
- Rakefile
|
72
74
|
- Rakefile.cross
|
73
75
|
- certs/ged.pem
|
76
|
+
- certs/larskanis-2022.pem
|
74
77
|
- ext/errorcodes.def
|
75
78
|
- ext/errorcodes.rb
|
76
79
|
- ext/errorcodes.txt
|
@@ -135,6 +138,7 @@ files:
|
|
135
138
|
- misc/ruby-pg/Rakefile
|
136
139
|
- misc/ruby-pg/lib/ruby/pg.rb
|
137
140
|
- pg.gemspec
|
141
|
+
- rakelib/task_extension.rb
|
138
142
|
- sample/array_insert.rb
|
139
143
|
- sample/async_api.rb
|
140
144
|
- sample/async_copyto.rb
|
@@ -175,7 +179,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
175
179
|
version: '2.5'
|
176
180
|
- - "<"
|
177
181
|
- !ruby/object:Gem::Version
|
178
|
-
version: 3.
|
182
|
+
version: 3.2.dev
|
179
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
180
184
|
requirements:
|
181
185
|
- - ">="
|
metadata.gz.sig
CHANGED
Binary file
|