pg 1.5.4-x86-mingw32 → 1.5.6-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 +3 -2
- data/.github/workflows/binary-gems.yml +6 -6
- data/.github/workflows/source-gem.yml +10 -10
- data/Gemfile +3 -0
- data/History.md +16 -0
- data/Rakefile +4 -1
- data/Rakefile.cross +4 -3
- data/certs/kanis@comcard.de.pem +20 -0
- data/certs/larskanis-2024.pem +24 -0
- data/ext/errorcodes.txt +1 -1
- data/ext/pg_binary_encoder.c +1 -1
- data/ext/pg_connection.c +22 -0
- data/ext/pg_copy_coder.c +7 -7
- 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/3.2/pg_ext.so +0 -0
- data/lib/pg/basic_type_map_for_queries.rb +8 -4
- data/lib/pg/basic_type_registry.rb +5 -1
- data/lib/pg/connection.rb +41 -32
- data/lib/pg/version.rb +1 -1
- data/lib/x86-mingw32/libpq.dll +0 -0
- data/pg.gemspec +1 -1
- data.tar.gz.sig +0 -0
- metadata +26 -24
- metadata.gz.sig +0 -0
- data/translation/.po4a-version +0 -7
- data/translation/po/all.pot +0 -936
- data/translation/po/ja.po +0 -1036
- data/translation/po4a.cfg +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc7343c260e806044336c65754ca7bd3917b02a588d661a27ac387f5a8a620bb
|
4
|
+
data.tar.gz: ae8e282efd5932e7f4a9abffe43eadc3e5474cb38b5977178aed9c87925addc8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1bf1a22cd11457eb2854986ca25c348eb4ea1d3fda205a0f98def80479d844da0e9ec9740461ad8452302798078687024c5b88899ae33c378847c2d15b317e5
|
7
|
+
data.tar.gz: 0dcd71d24c0e727855b658b8b5744059f2dfa2c30cf298fce09a92f812fcc882f14d0bcb1da355b00adfb39233c29767bff213a6b660b59af754835e770b89b6
|
checksums.yaml.gz.sig
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
s�@��bG�֦��z�7��.B�G�1>A`U7#��%|����6�7�N��8v��欆͡�g[���t�
|
2
|
+
uՔ�:Q�"�������K���:�>ܫ�S'�~}=+��T�G�l��
|
3
|
+
.
|
@@ -9,7 +9,7 @@ on:
|
|
9
9
|
|
10
10
|
jobs:
|
11
11
|
job_build_x64:
|
12
|
-
name:
|
12
|
+
name: Build
|
13
13
|
runs-on: ubuntu-latest
|
14
14
|
strategy:
|
15
15
|
fail-fast: false
|
@@ -23,7 +23,7 @@ jobs:
|
|
23
23
|
- name: Set up Ruby
|
24
24
|
uses: ruby/setup-ruby@v1
|
25
25
|
with:
|
26
|
-
ruby-version: "3.
|
26
|
+
ruby-version: "3.3"
|
27
27
|
- run: bundle install
|
28
28
|
|
29
29
|
- name: Create a dummy cert to satisfy the build
|
@@ -43,18 +43,18 @@ jobs:
|
|
43
43
|
path: pkg/*.gem
|
44
44
|
|
45
45
|
job_test_binary:
|
46
|
-
name: Test
|
46
|
+
name: Test
|
47
47
|
needs: job_build_x64
|
48
48
|
strategy:
|
49
49
|
fail-fast: false
|
50
50
|
matrix:
|
51
51
|
include:
|
52
52
|
- os: windows-latest
|
53
|
-
ruby: "3.
|
53
|
+
ruby: "3.3"
|
54
54
|
platform: "x64-mingw-ucrt"
|
55
|
-
PGVERSION:
|
55
|
+
PGVERSION: 16.0-1-windows-x64
|
56
56
|
- os: windows-latest
|
57
|
-
ruby: "3.1.
|
57
|
+
ruby: "3.1.4-1"
|
58
58
|
platform: "x86-mingw32"
|
59
59
|
PGVERSION: 10.20-1-windows
|
60
60
|
- os: windows-latest
|
@@ -9,7 +9,7 @@ on:
|
|
9
9
|
|
10
10
|
jobs:
|
11
11
|
job_build_gem:
|
12
|
-
name:
|
12
|
+
name: Build
|
13
13
|
runs-on: ubuntu-latest
|
14
14
|
steps:
|
15
15
|
- uses: actions/checkout@v3
|
@@ -28,7 +28,7 @@ jobs:
|
|
28
28
|
path: "*.gem"
|
29
29
|
|
30
30
|
job_test_gem:
|
31
|
-
name: Test
|
31
|
+
name: Test
|
32
32
|
needs: job_build_gem
|
33
33
|
strategy:
|
34
34
|
fail-fast: false
|
@@ -36,19 +36,19 @@ jobs:
|
|
36
36
|
include:
|
37
37
|
- os: windows
|
38
38
|
ruby: "head"
|
39
|
-
PGVERSION:
|
40
|
-
PGVER: "
|
39
|
+
PGVERSION: 16.0-1-windows-x64
|
40
|
+
PGVER: "16"
|
41
41
|
- os: windows
|
42
42
|
ruby: "2.5"
|
43
43
|
PGVERSION: 9.4.26-1-windows-x64
|
44
44
|
PGVER: "9.4"
|
45
45
|
- os: windows
|
46
46
|
ruby: "mswin"
|
47
|
-
PGVERSION:
|
48
|
-
PGVER: "
|
47
|
+
PGVERSION: 16.0-1-windows-x64
|
48
|
+
PGVER: "16"
|
49
49
|
- os: ubuntu
|
50
50
|
ruby: "head"
|
51
|
-
PGVER: "
|
51
|
+
PGVER: "16"
|
52
52
|
- os: ubuntu
|
53
53
|
ruby: "3.2"
|
54
54
|
PGVER: "12"
|
@@ -61,11 +61,11 @@ jobs:
|
|
61
61
|
PGVER: "13"
|
62
62
|
- os: ubuntu
|
63
63
|
ruby: "truffleruby-head"
|
64
|
-
PGVER: "
|
64
|
+
PGVER: "16"
|
65
65
|
- os: macos
|
66
66
|
ruby: "head"
|
67
|
-
PGVERSION:
|
68
|
-
PGVER: "
|
67
|
+
PGVERSION: 16.0-1-osx
|
68
|
+
PGVER: "16"
|
69
69
|
|
70
70
|
runs-on: ${{ matrix.os }}-${{ matrix.os_ver || 'latest' }}
|
71
71
|
env:
|
data/Gemfile
CHANGED
@@ -11,4 +11,7 @@ group :development, :test do
|
|
11
11
|
gem "rake-compiler-dock", "~> 1.0"
|
12
12
|
gem "rdoc", "~> 6.4"
|
13
13
|
gem "rspec", "~> 3.5"
|
14
|
+
# "bigdecimal" is a gem on ruby-3.4+ and it's optional for ruby-pg.
|
15
|
+
# Specs should succeed without it, but 4 examples are then excluded.
|
16
|
+
# gem "bigdecimal", "~> 3.0"
|
14
17
|
end
|
data/History.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
## v1.5.6 [2024-03-01] Lars Kanis <lars@greiz-reinsdorf.de>
|
2
|
+
|
3
|
+
- Renew address resolution (DNS) in conn.reset. [#558](https://github.com/ged/ruby-pg/pull/558)
|
4
|
+
This is important, if DNS is used for load balancing, etc.
|
5
|
+
- Make bigdecimal an optional dependency. [#556](https://github.com/ged/ruby-pg/pull/556)
|
6
|
+
It's a gem in ruby-3.4+, so that users shouldn't be forced to use it.
|
7
|
+
|
8
|
+
|
9
|
+
## v1.5.5 [2024-02-15] Lars Kanis <lars@greiz-reinsdorf.de>
|
10
|
+
|
11
|
+
- Explicitly retype timespec fields to int64_t to fix compatibility with 32bit arches. [#547](https://github.com/ged/ruby-pg/pull/547)
|
12
|
+
- Fix possible buffer overflows in PG::BinaryDecoder::CopyRow on 32 bit systems. [#548](https://github.com/ged/ruby-pg/pull/548)
|
13
|
+
- Add binary Windows gems for Ruby 3.3.
|
14
|
+
- Update Windows fat binary gem to OpenSSL-3.2.1 and PostgreSQL-16.2.
|
15
|
+
|
16
|
+
|
1
17
|
## v1.5.4 [2023-09-01] Lars Kanis <lars@greiz-reinsdorf.de>
|
2
18
|
|
3
19
|
- Fix compiling the pg extension with MSVC 2022. [#535](https://github.com/ged/ruby-pg/pull/535)
|
data/Rakefile
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# -*- rake -*-
|
2
2
|
|
3
|
+
# Enable english error messages, as some specs depend on them
|
4
|
+
ENV["LANG"] = "C"
|
5
|
+
|
3
6
|
require 'rbconfig'
|
4
7
|
require 'pathname'
|
5
8
|
require 'tmpdir'
|
@@ -91,7 +94,7 @@ end
|
|
91
94
|
|
92
95
|
desc "Update list of server error codes"
|
93
96
|
task :update_error_codes do
|
94
|
-
URL_ERRORCODES_TXT = "http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;f=src/backend/utils/errcodes.txt;hb=refs/tags/
|
97
|
+
URL_ERRORCODES_TXT = "http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;f=src/backend/utils/errcodes.txt;hb=refs/tags/REL_16_0"
|
95
98
|
|
96
99
|
ERRORCODES_TXT = "ext/errorcodes.txt"
|
97
100
|
sh "wget #{URL_ERRORCODES_TXT.inspect} -O #{ERRORCODES_TXT.inspect} || curl #{URL_ERRORCODES_TXT.inspect} -o #{ERRORCODES_TXT.inspect}"
|
data/Rakefile.cross
CHANGED
@@ -31,8 +31,8 @@ class CrossLibrary < OpenStruct
|
|
31
31
|
self.host_platform = toolchain
|
32
32
|
|
33
33
|
# Cross-compilation constants
|
34
|
-
self.openssl_version = ENV['OPENSSL_VERSION'] || '3.1
|
35
|
-
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '
|
34
|
+
self.openssl_version = ENV['OPENSSL_VERSION'] || '3.2.1'
|
35
|
+
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '16.2'
|
36
36
|
|
37
37
|
# Check if symlinks work in the current working directory.
|
38
38
|
# This fails, if rake-compiler-dock is running on a Windows box.
|
@@ -184,6 +184,7 @@ class CrossLibrary < OpenStruct
|
|
184
184
|
"--host=#{host_platform}",
|
185
185
|
'--with-openssl',
|
186
186
|
'--without-zlib',
|
187
|
+
'--without-icu',
|
187
188
|
]
|
188
189
|
|
189
190
|
chdir( static_postgresql_builddir ) do
|
@@ -290,7 +291,7 @@ CrossLibraries.each do |xlib|
|
|
290
291
|
RakeCompilerDock.sh <<-EOT, platform: platform
|
291
292
|
(cp build/gem/gem-*.pem ~/.gem/ || true) &&
|
292
293
|
bundle install --local &&
|
293
|
-
rake native:#{platform} pkg/#{$gem_spec.full_name}-#{platform}.gem MAKE="make -j`nproc`" RUBY_CC_VERSION=3.2.0:3.1.0:3.0.0:2.7.0:2.6.0:2.5.0
|
294
|
+
rake native:#{platform} pkg/#{$gem_spec.full_name}-#{platform}.gem MAKE="make -j`nproc`" RUBY_CC_VERSION=3.3.0:3.2.0:3.1.0:3.0.0:2.7.0:2.6.0:2.5.0
|
294
295
|
EOT
|
295
296
|
end
|
296
297
|
desc "Build the windows binary gems"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDLjCCAhagAwIBAgIBCzANBgkqhkiG9w0BAQsFADA9MQ4wDAYDVQQDDAVrYW5p
|
3
|
+
czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
|
4
|
+
Fw0yMzA0MjgwOTI0NDhaFw0yNDA0MjcwOTI0NDhaMD0xDjAMBgNVBAMMBWthbmlz
|
5
|
+
MRcwFQYKCZImiZPyLGQBGRYHY29tY2FyZDESMBAGCgmSJomT8ixkARkWAmRlMIIB
|
6
|
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApop+rNmg35bzRugZ21VMGqI6
|
7
|
+
HGzPLO4VHYncWn/xmgPU/ZMcZdfj6MzIaZJ/czXyt4eHpBk1r8QOV3gBXnRXEjVW
|
8
|
+
9xi+EdVOkTV2/AVFKThcbTAQGiF/bT1n2M+B1GTybRzMg6hyhOJeGPqIhLfJEpxn
|
9
|
+
lJi4+ENAVT4MpqHEAGB8yFoPC0GqiOHQsdHxQV3P3c2OZqG+yJey74QtwA2tLcLn
|
10
|
+
Q53c63+VLGsOjODl1yPn/2ejyq8qWu6ahfTxiIlSar2UbwtaQGBDFdb2CXgEufXT
|
11
|
+
L7oaPxlmj+Q2oLOfOnInd2Oxop59HoJCQPsg8f921J43NCQGA8VHK6paxIRDLQID
|
12
|
+
AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUvgTdT7fe
|
13
|
+
x17ugO3IOsjEJwW7KP4wDQYJKoZIhvcNAQELBQADggEBACAxNXwfMGG7paZjnG/c
|
14
|
+
smdi/ocW2GmCNtILaSzDZqlD5LoA68MiO7u5vwWyBaDJ6giUB330VJoGRbWMxvxN
|
15
|
+
JU6Bnwa4yYp9YtF91wYIi7FXwIrCPKd9bk3bf4M5wECdsv+zvVceq2zRXqD7fci8
|
16
|
+
1LRG8ort/f4TgaT7B4aNwOaabA2UT6u0FGeglqxLkhir86MY3QQyBfJZUoTKWGkz
|
17
|
+
S9a7GXsYpe+8HMOaE4+SZp8SORKPgATND5m/4VdzuO59VXjE5UP7QpXigbxAt7H7
|
18
|
+
ciK5Du2ZDhowmWzZwNzR7VvVmfAK6RQJlRB03VkkQRWGld5yApOrYDne6WbD8kE0
|
19
|
+
uM8=
|
20
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,24 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEBDCCAmygAwIBAgIBAzANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
3
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yNDAyMjgxOTMxNDdaFw0yNTAy
|
4
|
+
MjcxOTMxNDdaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
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
|
+
9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjOTA3MAkG
|
14
|
+
A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQ4h1tIyvdUWtMI739xMzTR
|
15
|
+
7EfMFzANBgkqhkiG9w0BAQsFAAOCAYEArBmHSfnUyNWf3R1Fx0mMHloWGdcKn2D2
|
16
|
+
BsqTApXU2nADiyppIqRq4b9e7hw342uzadSLkoQcEFOxThLRhAcijoWfQVBcsbV/
|
17
|
+
ZsCY1qlUTIJuSWxaSyS4efUX+N4eMNyPM9oW/sphlWFo0DgI34Y9WB6HDzH+O71y
|
18
|
+
R7PARke3f4kYnRJf5yRQLPDrH9UYt9KlBQm6l7XMtr5EMnQt0EfcmZEi9H4t/vS2
|
19
|
+
haxvpFMdAKo4H46GBYNO96r6b74t++vgQSBTg/AFVwvRZwNSrPPcBfb4xxeEAhRR
|
20
|
+
x+LU7feIH7lZ//3buiyD03gLAEtHXai0Y+/VfuWIpwYJAl2BO/tU7FS/dtbJq9oc
|
21
|
+
dI36Yyzy+BrCM0WT4oCsagePNb97FaNhl4F6sM5JEPT0ZPxRx0i3G4TNNIYziVos
|
22
|
+
5wFER6XhvvLDFAMh/jMg+s7Wd5SbSHgHNSUaUGVtdWkVPOer6oF0aLdZUR3CETkn
|
23
|
+
5nWXZma/BUd3YgYA/Xumc6QQqIS4p7mr
|
24
|
+
-----END CERTIFICATE-----
|
data/ext/errorcodes.txt
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# errcodes.txt
|
3
3
|
# PostgreSQL error codes
|
4
4
|
#
|
5
|
-
# Copyright (c) 2003-
|
5
|
+
# Copyright (c) 2003-2023, PostgreSQL Global Development Group
|
6
6
|
#
|
7
7
|
# This list serves as the basis for generating source files containing error
|
8
8
|
# codes. It is kept in a common format to make sure all these source files have
|
data/ext/pg_binary_encoder.c
CHANGED
@@ -185,7 +185,7 @@ pg_bin_enc_timestamp(t_pg_coder *this, VALUE value, char *out, VALUE *intermedia
|
|
185
185
|
ts = rb_time_timespec(*intermediate);
|
186
186
|
/* PostgreSQL's timestamp is based on year 2000 and Ruby's time is based on 1970.
|
187
187
|
* Adjust the 30 years difference. */
|
188
|
-
timestamp = (ts.tv_sec - 10957L * 24L * 3600L) * 1000000 + (ts.tv_nsec / 1000);
|
188
|
+
timestamp = ((int64_t)ts.tv_sec - 10957L * 24L * 3600L) * 1000000 + ((int64_t)ts.tv_nsec / 1000);
|
189
189
|
|
190
190
|
if( this->flags & PG_CODER_TIMESTAMP_DB_LOCAL ) {
|
191
191
|
/* send as local time */
|
data/ext/pg_connection.c
CHANGED
@@ -563,6 +563,27 @@ pgconn_sync_reset( VALUE self )
|
|
563
563
|
return self;
|
564
564
|
}
|
565
565
|
|
566
|
+
static VALUE
|
567
|
+
pgconn_reset_start2( VALUE self, VALUE conninfo )
|
568
|
+
{
|
569
|
+
t_pg_connection *this = pg_get_connection( self );
|
570
|
+
|
571
|
+
/* Close old connection */
|
572
|
+
pgconn_close_socket_io( self );
|
573
|
+
PQfinish( this->pgconn );
|
574
|
+
|
575
|
+
/* Start new connection */
|
576
|
+
this->pgconn = gvl_PQconnectStart( StringValueCStr(conninfo) );
|
577
|
+
|
578
|
+
if( this->pgconn == NULL )
|
579
|
+
rb_raise(rb_ePGerror, "PQconnectStart() unable to allocate PGconn structure");
|
580
|
+
|
581
|
+
if ( PQstatus(this->pgconn) == CONNECTION_BAD )
|
582
|
+
pg_raise_conn_error( rb_eConnectionBad, self, "%s", PQerrorMessage(this->pgconn));
|
583
|
+
|
584
|
+
return Qnil;
|
585
|
+
}
|
586
|
+
|
566
587
|
/*
|
567
588
|
* call-seq:
|
568
589
|
* conn.reset_start() -> nil
|
@@ -4468,6 +4489,7 @@ init_pg_connection(void)
|
|
4468
4489
|
rb_define_method(rb_cPGconn, "finished?", pgconn_finished_p, 0);
|
4469
4490
|
rb_define_method(rb_cPGconn, "sync_reset", pgconn_sync_reset, 0);
|
4470
4491
|
rb_define_method(rb_cPGconn, "reset_start", pgconn_reset_start, 0);
|
4492
|
+
rb_define_private_method(rb_cPGconn, "reset_start2", pgconn_reset_start2, 1);
|
4471
4493
|
rb_define_method(rb_cPGconn, "reset_poll", pgconn_reset_poll, 0);
|
4472
4494
|
rb_define_alias(rb_cPGconn, "close", "finish");
|
4473
4495
|
|
data/ext/pg_copy_coder.c
CHANGED
@@ -795,26 +795,26 @@ pg_bin_dec_copy_row(t_pg_coder *conv, const char *input_line, int len, int _tupl
|
|
795
795
|
cur_ptr = input_line;
|
796
796
|
line_end_ptr = input_line + len;
|
797
797
|
|
798
|
-
if (cur_ptr
|
798
|
+
if (line_end_ptr - cur_ptr >= 11 && memcmp(cur_ptr, BinarySignature, 11) == 0){
|
799
799
|
/* binary COPY header signature detected -> just drop it */
|
800
800
|
int ext_bytes;
|
801
801
|
cur_ptr += 11;
|
802
802
|
|
803
803
|
/* read flags */
|
804
|
-
if (cur_ptr
|
804
|
+
if (line_end_ptr - cur_ptr < 4 ) goto length_error;
|
805
805
|
cur_ptr += 4;
|
806
806
|
|
807
807
|
/* read header extensions */
|
808
|
-
if (cur_ptr
|
808
|
+
if (line_end_ptr - cur_ptr < 4 ) goto length_error;
|
809
809
|
ext_bytes = read_nbo32(cur_ptr);
|
810
810
|
if (ext_bytes < 0) goto length_error;
|
811
811
|
cur_ptr += 4;
|
812
|
-
if (cur_ptr
|
812
|
+
if (line_end_ptr - cur_ptr < ext_bytes ) goto length_error;
|
813
813
|
cur_ptr += ext_bytes;
|
814
814
|
}
|
815
815
|
|
816
816
|
/* read row header */
|
817
|
-
if (cur_ptr
|
817
|
+
if (line_end_ptr - cur_ptr < 2 ) goto length_error;
|
818
818
|
nfields = read_nbo16(cur_ptr);
|
819
819
|
cur_ptr += 2;
|
820
820
|
|
@@ -830,7 +830,7 @@ pg_bin_dec_copy_row(t_pg_coder *conv, const char *input_line, int len, int _tupl
|
|
830
830
|
VALUE field_value;
|
831
831
|
|
832
832
|
/* read field size */
|
833
|
-
if (cur_ptr
|
833
|
+
if (line_end_ptr - cur_ptr < 4 ) goto length_error;
|
834
834
|
input_len = read_nbo32(cur_ptr);
|
835
835
|
cur_ptr += 4;
|
836
836
|
|
@@ -839,7 +839,7 @@ pg_bin_dec_copy_row(t_pg_coder *conv, const char *input_line, int len, int _tupl
|
|
839
839
|
/* NULL indicator */
|
840
840
|
rb_ary_push(array, Qnil);
|
841
841
|
} else {
|
842
|
-
if (cur_ptr
|
842
|
+
if (line_end_ptr - cur_ptr < input_len ) goto length_error;
|
843
843
|
|
844
844
|
/* copy input data to field_str */
|
845
845
|
PG_RB_STR_ENSURE_CAPA( field_str, input_len, output_ptr, end_capa_ptr );
|
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/3.2/pg_ext.so
CHANGED
Binary file
|
@@ -166,6 +166,12 @@ class PG::BasicTypeMapForQueries < PG::TypeMapByClass
|
|
166
166
|
@textarray_encoder
|
167
167
|
end
|
168
168
|
|
169
|
+
begin
|
170
|
+
require "bigdecimal"
|
171
|
+
has_bigdecimal = true
|
172
|
+
rescue LoadError
|
173
|
+
end
|
174
|
+
|
169
175
|
DEFAULT_TYPE_MAP = PG.make_shareable({
|
170
176
|
TrueClass => [1, 'bool', 'bool'],
|
171
177
|
FalseClass => [1, 'bool', 'bool'],
|
@@ -173,7 +179,6 @@ class PG::BasicTypeMapForQueries < PG::TypeMapByClass
|
|
173
179
|
# to unnecessary type conversions on server side.
|
174
180
|
Integer => [0, 'int8'],
|
175
181
|
Float => [0, 'float8'],
|
176
|
-
BigDecimal => [0, 'numeric'],
|
177
182
|
Time => [0, 'timestamptz'],
|
178
183
|
# We use text format and no type OID for IPAddr, because setting the OID can lead
|
179
184
|
# to unnecessary inet/cidr conversions on the server side.
|
@@ -181,7 +186,7 @@ class PG::BasicTypeMapForQueries < PG::TypeMapByClass
|
|
181
186
|
Hash => [0, 'json'],
|
182
187
|
Array => :get_array_type,
|
183
188
|
BinaryData => [1, 'bytea'],
|
184
|
-
})
|
189
|
+
}.merge(has_bigdecimal ? {BigDecimal => [0, 'numeric']} : {}))
|
185
190
|
private_constant :DEFAULT_TYPE_MAP
|
186
191
|
|
187
192
|
DEFAULT_ARRAY_TYPE_MAP = PG.make_shareable({
|
@@ -190,9 +195,8 @@ class PG::BasicTypeMapForQueries < PG::TypeMapByClass
|
|
190
195
|
Integer => [0, '_int8'],
|
191
196
|
String => [0, '_text'],
|
192
197
|
Float => [0, '_float8'],
|
193
|
-
BigDecimal => [0, '_numeric'],
|
194
198
|
Time => [0, '_timestamptz'],
|
195
199
|
IPAddr => [0, '_inet'],
|
196
|
-
})
|
200
|
+
}.merge(has_bigdecimal ? {BigDecimal => [0, '_numeric']} : {}))
|
197
201
|
private_constant :DEFAULT_ARRAY_TYPE_MAP
|
198
202
|
end
|
@@ -225,7 +225,11 @@ class PG::BasicTypeRegistry
|
|
225
225
|
alias_type 0, 'int8', 'int2'
|
226
226
|
alias_type 0, 'oid', 'int2'
|
227
227
|
|
228
|
-
|
228
|
+
begin
|
229
|
+
require "bigdecimal"
|
230
|
+
register_type 0, 'numeric', PG::TextEncoder::Numeric, PG::TextDecoder::Numeric
|
231
|
+
rescue LoadError
|
232
|
+
end
|
229
233
|
register_type 0, 'text', PG::TextEncoder::String, PG::TextDecoder::String
|
230
234
|
alias_type 0, 'varchar', 'text'
|
231
235
|
alias_type 0, 'char', 'text'
|
data/lib/pg/connection.rb
CHANGED
@@ -565,7 +565,12 @@ class PG::Connection
|
|
565
565
|
# Resets the backend connection. This method closes the
|
566
566
|
# backend connection and tries to re-connect.
|
567
567
|
def reset
|
568
|
-
|
568
|
+
iopts = conninfo_hash.compact
|
569
|
+
if iopts[:host] && !iopts[:host].empty? && PG.library_version >= 100000
|
570
|
+
iopts = self.class.send(:resolve_hosts, iopts)
|
571
|
+
end
|
572
|
+
conninfo = self.class.parse_connect_args( iopts );
|
573
|
+
reset_start2(conninfo)
|
569
574
|
async_connect_or_reset(:reset_poll)
|
570
575
|
self
|
571
576
|
end
|
@@ -773,6 +778,40 @@ class PG::Connection
|
|
773
778
|
alias setdb new
|
774
779
|
alias setdblogin new
|
775
780
|
|
781
|
+
# Resolve DNS in Ruby to avoid blocking state while connecting.
|
782
|
+
# Multiple comma-separated values are generated, if the hostname resolves to both IPv4 and IPv6 addresses.
|
783
|
+
# This requires PostgreSQL-10+, so no DNS resolving is done on earlier versions.
|
784
|
+
private def resolve_hosts(iopts)
|
785
|
+
ihosts = iopts[:host].split(",", -1)
|
786
|
+
iports = iopts[:port].split(",", -1)
|
787
|
+
iports = [nil] if iports.size == 0
|
788
|
+
iports = iports * ihosts.size if iports.size == 1
|
789
|
+
raise PG::ConnectionBad, "could not match #{iports.size} port numbers to #{ihosts.size} hosts" if iports.size != ihosts.size
|
790
|
+
|
791
|
+
dests = ihosts.each_with_index.flat_map do |mhost, idx|
|
792
|
+
unless host_is_named_pipe?(mhost)
|
793
|
+
if Fiber.respond_to?(:scheduler) &&
|
794
|
+
Fiber.scheduler &&
|
795
|
+
RUBY_VERSION < '3.1.'
|
796
|
+
|
797
|
+
# Use a second thread to avoid blocking of the scheduler.
|
798
|
+
# `TCPSocket.gethostbyname` isn't fiber aware before ruby-3.1.
|
799
|
+
hostaddrs = Thread.new{ Addrinfo.getaddrinfo(mhost, nil, nil, :STREAM).map(&:ip_address) rescue [''] }.value
|
800
|
+
else
|
801
|
+
hostaddrs = Addrinfo.getaddrinfo(mhost, nil, nil, :STREAM).map(&:ip_address) rescue ['']
|
802
|
+
end
|
803
|
+
else
|
804
|
+
# No hostname to resolve (UnixSocket)
|
805
|
+
hostaddrs = [nil]
|
806
|
+
end
|
807
|
+
hostaddrs.map { |hostaddr| [hostaddr, mhost, iports[idx]] }
|
808
|
+
end
|
809
|
+
iopts.merge(
|
810
|
+
hostaddr: dests.map{|d| d[0] }.join(","),
|
811
|
+
host: dests.map{|d| d[1] }.join(","),
|
812
|
+
port: dests.map{|d| d[2] }.join(","))
|
813
|
+
end
|
814
|
+
|
776
815
|
private def connect_to_hosts(*args)
|
777
816
|
option_string = parse_connect_args(*args)
|
778
817
|
iopts = PG::Connection.conninfo_parse(option_string).each_with_object({}){|h, o| o[h[:keyword].to_sym] = h[:val] if h[:val] }
|
@@ -782,37 +821,7 @@ class PG::Connection
|
|
782
821
|
# hostaddr is provided -> no need to resolve hostnames
|
783
822
|
|
784
823
|
elsif iopts[:host] && !iopts[:host].empty? && PG.library_version >= 100000
|
785
|
-
|
786
|
-
# Multiple comma-separated values are generated, if the hostname resolves to both IPv4 and IPv6 addresses.
|
787
|
-
# This requires PostgreSQL-10+, so no DNS resolving is done on earlier versions.
|
788
|
-
ihosts = iopts[:host].split(",", -1)
|
789
|
-
iports = iopts[:port].split(",", -1)
|
790
|
-
iports = [nil] if iports.size == 0
|
791
|
-
iports = iports * ihosts.size if iports.size == 1
|
792
|
-
raise PG::ConnectionBad, "could not match #{iports.size} port numbers to #{ihosts.size} hosts" if iports.size != ihosts.size
|
793
|
-
|
794
|
-
dests = ihosts.each_with_index.flat_map do |mhost, idx|
|
795
|
-
unless host_is_named_pipe?(mhost)
|
796
|
-
if Fiber.respond_to?(:scheduler) &&
|
797
|
-
Fiber.scheduler &&
|
798
|
-
RUBY_VERSION < '3.1.'
|
799
|
-
|
800
|
-
# Use a second thread to avoid blocking of the scheduler.
|
801
|
-
# `TCPSocket.gethostbyname` isn't fiber aware before ruby-3.1.
|
802
|
-
hostaddrs = Thread.new{ Addrinfo.getaddrinfo(mhost, nil, nil, :STREAM).map(&:ip_address) rescue [''] }.value
|
803
|
-
else
|
804
|
-
hostaddrs = Addrinfo.getaddrinfo(mhost, nil, nil, :STREAM).map(&:ip_address) rescue ['']
|
805
|
-
end
|
806
|
-
else
|
807
|
-
# No hostname to resolve (UnixSocket)
|
808
|
-
hostaddrs = [nil]
|
809
|
-
end
|
810
|
-
hostaddrs.map { |hostaddr| [hostaddr, mhost, iports[idx]] }
|
811
|
-
end
|
812
|
-
iopts.merge!(
|
813
|
-
hostaddr: dests.map{|d| d[0] }.join(","),
|
814
|
-
host: dests.map{|d| d[1] }.join(","),
|
815
|
-
port: dests.map{|d| d[2] }.join(","))
|
824
|
+
iopts = resolve_hosts(iopts)
|
816
825
|
else
|
817
826
|
# No host given
|
818
827
|
end
|
data/lib/pg/version.rb
CHANGED
data/lib/x86-mingw32/libpq.dll
CHANGED
Binary file
|
data/pg.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
# Specify which files should be added to the gem when it is released.
|
24
24
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
25
25
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
26
|
-
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
26
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features|translation)/}) }
|
27
27
|
end
|
28
28
|
spec.extensions = ["ext/extconf.rb"]
|
29
29
|
spec.require_paths = ["lib"]
|
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.5.
|
4
|
+
version: 1.5.6
|
5
5
|
platform: x86-mingw32
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -11,26 +11,30 @@ 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
|
-
|
14
|
+
MIIEBDCCAmygAwIBAgIBAzANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
15
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yNDAyMjgxOTMxNDdaFw0yNTAy
|
16
|
+
MjcxOTMxNDdaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
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
|
+
9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjOTA3MAkG
|
26
|
+
A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQ4h1tIyvdUWtMI739xMzTR
|
27
|
+
7EfMFzANBgkqhkiG9w0BAQsFAAOCAYEArBmHSfnUyNWf3R1Fx0mMHloWGdcKn2D2
|
28
|
+
BsqTApXU2nADiyppIqRq4b9e7hw342uzadSLkoQcEFOxThLRhAcijoWfQVBcsbV/
|
29
|
+
ZsCY1qlUTIJuSWxaSyS4efUX+N4eMNyPM9oW/sphlWFo0DgI34Y9WB6HDzH+O71y
|
30
|
+
R7PARke3f4kYnRJf5yRQLPDrH9UYt9KlBQm6l7XMtr5EMnQt0EfcmZEi9H4t/vS2
|
31
|
+
haxvpFMdAKo4H46GBYNO96r6b74t++vgQSBTg/AFVwvRZwNSrPPcBfb4xxeEAhRR
|
32
|
+
x+LU7feIH7lZ//3buiyD03gLAEtHXai0Y+/VfuWIpwYJAl2BO/tU7FS/dtbJq9oc
|
33
|
+
dI36Yyzy+BrCM0WT4oCsagePNb97FaNhl4F6sM5JEPT0ZPxRx0i3G4TNNIYziVos
|
34
|
+
5wFER6XhvvLDFAMh/jMg+s7Wd5SbSHgHNSUaUGVtdWkVPOer6oF0aLdZUR3CETkn
|
35
|
+
5nWXZma/BUd3YgYA/Xumc6QQqIS4p7mr
|
32
36
|
-----END CERTIFICATE-----
|
33
|
-
date:
|
37
|
+
date: 2024-03-01 00:00:00.000000000 Z
|
34
38
|
dependencies: []
|
35
39
|
description: Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL
|
36
40
|
9.3 and later.
|
@@ -122,8 +126,10 @@ files:
|
|
122
126
|
- Rakefile
|
123
127
|
- Rakefile.cross
|
124
128
|
- certs/ged.pem
|
129
|
+
- certs/kanis@comcard.de.pem
|
125
130
|
- certs/larskanis-2022.pem
|
126
131
|
- certs/larskanis-2023.pem
|
132
|
+
- certs/larskanis-2024.pem
|
127
133
|
- ext/errorcodes.def
|
128
134
|
- ext/errorcodes.rb
|
129
135
|
- ext/errorcodes.txt
|
@@ -219,10 +225,6 @@ files:
|
|
219
225
|
- sample/test_binary_values.rb
|
220
226
|
- sample/wal_shipper.rb
|
221
227
|
- sample/warehouse_partitions.rb
|
222
|
-
- translation/.po4a-version
|
223
|
-
- translation/po/all.pot
|
224
|
-
- translation/po/ja.po
|
225
|
-
- translation/po4a.cfg
|
226
228
|
homepage: https://github.com/ged/ruby-pg
|
227
229
|
licenses:
|
228
230
|
- BSD-2-Clause
|
metadata.gz.sig
CHANGED
Binary file
|
data/translation/.po4a-version
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
po4a version 0.68.
|
2
|
-
Written by Martin Quinson and Denis Barbier.
|
3
|
-
|
4
|
-
Copyright © 2002-2022 Software in the Public Interest, Inc.
|
5
|
-
This is free software; see source code for copying
|
6
|
-
conditions. There is NO warranty; not even for
|
7
|
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|