pg 1.2.3 → 1.5.3
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 +42 -0
- data/.gems +6 -0
- data/.github/workflows/binary-gems.yml +117 -0
- data/.github/workflows/source-gem.yml +137 -0
- data/.gitignore +22 -0
- data/.hgsigs +34 -0
- data/.hgtags +41 -0
- data/.irbrc +23 -0
- data/.pryrc +23 -0
- data/.tm_properties +21 -0
- data/.travis.yml +49 -0
- data/Gemfile +14 -0
- data/History.md +876 -0
- data/Manifest.txt +0 -1
- data/README.ja.md +276 -0
- data/README.md +286 -0
- data/Rakefile +33 -135
- data/Rakefile.cross +12 -13
- data/certs/ged.pem +24 -0
- data/certs/larskanis-2022.pem +26 -0
- data/certs/larskanis-2023.pem +24 -0
- data/ext/errorcodes.def +12 -0
- data/ext/errorcodes.rb +0 -0
- data/ext/errorcodes.txt +4 -1
- data/ext/extconf.rb +100 -25
- data/ext/gvl_wrappers.c +4 -0
- data/ext/gvl_wrappers.h +23 -0
- data/ext/pg.c +72 -57
- data/ext/pg.h +28 -4
- data/ext/pg_binary_decoder.c +80 -1
- data/ext/pg_binary_encoder.c +225 -1
- data/ext/pg_coder.c +96 -33
- data/ext/pg_connection.c +996 -697
- data/ext/pg_copy_coder.c +351 -33
- data/ext/pg_errors.c +1 -1
- data/ext/pg_record_coder.c +50 -19
- data/ext/pg_result.c +177 -64
- data/ext/pg_text_decoder.c +29 -11
- data/ext/pg_text_encoder.c +29 -16
- data/ext/pg_tuple.c +83 -60
- data/ext/pg_type_map.c +44 -10
- data/ext/pg_type_map_all_strings.c +17 -3
- data/ext/pg_type_map_by_class.c +54 -27
- data/ext/pg_type_map_by_column.c +73 -31
- data/ext/pg_type_map_by_mri_type.c +48 -19
- data/ext/pg_type_map_by_oid.c +59 -27
- data/ext/pg_type_map_in_ruby.c +55 -21
- data/ext/pg_util.c +2 -2
- data/lib/pg/basic_type_map_based_on_result.rb +67 -0
- data/lib/pg/basic_type_map_for_queries.rb +198 -0
- data/lib/pg/basic_type_map_for_results.rb +104 -0
- data/lib/pg/basic_type_registry.rb +299 -0
- data/lib/pg/binary_decoder/date.rb +9 -0
- data/lib/pg/binary_decoder/timestamp.rb +26 -0
- data/lib/pg/binary_encoder/timestamp.rb +20 -0
- data/lib/pg/coder.rb +15 -13
- data/lib/pg/connection.rb +743 -83
- data/lib/pg/exceptions.rb +14 -1
- data/lib/pg/text_decoder/date.rb +18 -0
- data/lib/pg/text_decoder/inet.rb +9 -0
- data/lib/pg/text_decoder/json.rb +14 -0
- data/lib/pg/text_decoder/numeric.rb +9 -0
- data/lib/pg/text_decoder/timestamp.rb +30 -0
- data/lib/pg/text_encoder/date.rb +12 -0
- data/lib/pg/text_encoder/inet.rb +28 -0
- data/lib/pg/text_encoder/json.rb +14 -0
- data/lib/pg/text_encoder/numeric.rb +9 -0
- data/lib/pg/text_encoder/timestamp.rb +24 -0
- data/lib/pg/version.rb +4 -0
- data/lib/pg.rb +94 -39
- data/misc/openssl-pg-segfault.rb +31 -0
- data/misc/postgres/History.txt +9 -0
- data/misc/postgres/Manifest.txt +5 -0
- data/misc/postgres/README.txt +21 -0
- data/misc/postgres/Rakefile +21 -0
- data/misc/postgres/lib/postgres.rb +16 -0
- data/misc/ruby-pg/History.txt +9 -0
- data/misc/ruby-pg/Manifest.txt +5 -0
- data/misc/ruby-pg/README.txt +21 -0
- data/misc/ruby-pg/Rakefile +21 -0
- data/misc/ruby-pg/lib/ruby/pg.rb +16 -0
- data/pg.gemspec +34 -0
- data/rakelib/task_extension.rb +46 -0
- data/sample/array_insert.rb +20 -0
- data/sample/async_api.rb +102 -0
- data/sample/async_copyto.rb +39 -0
- data/sample/async_mixed.rb +56 -0
- data/sample/check_conn.rb +21 -0
- data/sample/copydata.rb +71 -0
- data/sample/copyfrom.rb +81 -0
- data/sample/copyto.rb +19 -0
- data/sample/cursor.rb +21 -0
- data/sample/disk_usage_report.rb +177 -0
- data/sample/issue-119.rb +94 -0
- data/sample/losample.rb +69 -0
- data/sample/minimal-testcase.rb +17 -0
- data/sample/notify_wait.rb +72 -0
- data/sample/pg_statistics.rb +285 -0
- data/sample/replication_monitor.rb +222 -0
- data/sample/test_binary_values.rb +33 -0
- data/sample/wal_shipper.rb +434 -0
- data/sample/warehouse_partitions.rb +311 -0
- data/translation/.po4a-version +7 -0
- data/translation/po/all.pot +910 -0
- data/translation/po/ja.po +1047 -0
- data/translation/po4a.cfg +12 -0
- data.tar.gz.sig +0 -0
- metadata +142 -210
- metadata.gz.sig +0 -0
- data/ChangeLog +0 -0
- data/History.rdoc +0 -578
- data/README.ja.rdoc +0 -13
- data/README.rdoc +0 -213
- data/lib/pg/basic_type_mapping.rb +0 -522
- data/lib/pg/binary_decoder.rb +0 -23
- data/lib/pg/constants.rb +0 -12
- data/lib/pg/text_decoder.rb +0 -46
- data/lib/pg/text_encoder.rb +0 -59
- data/spec/data/expected_trace.out +0 -26
- data/spec/data/random_binary_data +0 -0
- data/spec/helpers.rb +0 -380
- data/spec/pg/basic_type_mapping_spec.rb +0 -630
- data/spec/pg/connection_spec.rb +0 -1949
- data/spec/pg/connection_sync_spec.rb +0 -41
- data/spec/pg/result_spec.rb +0 -681
- data/spec/pg/tuple_spec.rb +0 -333
- data/spec/pg/type_map_by_class_spec.rb +0 -138
- data/spec/pg/type_map_by_column_spec.rb +0 -226
- data/spec/pg/type_map_by_mri_type_spec.rb +0 -136
- data/spec/pg/type_map_by_oid_spec.rb +0 -149
- data/spec/pg/type_map_in_ruby_spec.rb +0 -164
- data/spec/pg/type_map_spec.rb +0 -22
- data/spec/pg/type_spec.rb +0 -1123
- data/spec/pg_spec.rb +0 -50
data/Rakefile
CHANGED
|
@@ -3,20 +3,11 @@
|
|
|
3
3
|
require 'rbconfig'
|
|
4
4
|
require 'pathname'
|
|
5
5
|
require 'tmpdir'
|
|
6
|
-
|
|
7
|
-
begin
|
|
8
|
-
require 'rake/extensiontask'
|
|
9
|
-
rescue LoadError
|
|
10
|
-
abort "This Rakefile requires rake-compiler (gem install rake-compiler)"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
begin
|
|
14
|
-
require 'hoe'
|
|
15
|
-
rescue LoadError
|
|
16
|
-
abort "This Rakefile requires hoe (gem install hoe)"
|
|
17
|
-
end
|
|
18
|
-
|
|
6
|
+
require 'rake/extensiontask'
|
|
19
7
|
require 'rake/clean'
|
|
8
|
+
require 'rspec/core/rake_task'
|
|
9
|
+
require 'bundler'
|
|
10
|
+
require 'bundler/gem_helper'
|
|
20
11
|
|
|
21
12
|
# Build directory constants
|
|
22
13
|
BASEDIR = Pathname( __FILE__ ).dirname
|
|
@@ -25,82 +16,23 @@ LIBDIR = BASEDIR + 'lib'
|
|
|
25
16
|
EXTDIR = BASEDIR + 'ext'
|
|
26
17
|
PKGDIR = BASEDIR + 'pkg'
|
|
27
18
|
TMPDIR = BASEDIR + 'tmp'
|
|
19
|
+
TESTDIR = BASEDIR + "tmp_test_*"
|
|
28
20
|
|
|
29
21
|
DLEXT = RbConfig::CONFIG['DLEXT']
|
|
30
22
|
EXT = LIBDIR + "pg_ext.#{DLEXT}"
|
|
31
23
|
|
|
32
24
|
GEMSPEC = 'pg.gemspec'
|
|
33
25
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
CLOBBER.include( TEST_DIRECTORY.to_s )
|
|
26
|
+
CLEAN.include( TESTDIR.to_s )
|
|
37
27
|
CLEAN.include( PKGDIR.to_s, TMPDIR.to_s )
|
|
38
28
|
CLEAN.include "lib/*/libpq.dll"
|
|
39
29
|
CLEAN.include "lib/pg_ext.*"
|
|
40
|
-
|
|
41
|
-
# Set up Hoe plugins
|
|
42
|
-
Hoe.plugin :mercurial
|
|
43
|
-
Hoe.plugin :signing
|
|
44
|
-
Hoe.plugin :deveiate
|
|
45
|
-
Hoe.plugin :bundler
|
|
46
|
-
|
|
47
|
-
Hoe.plugins.delete :rubyforge
|
|
48
|
-
Hoe.plugins.delete :compiler
|
|
30
|
+
CLEAN.include "lib/pg/postgresql_lib_path.rb"
|
|
49
31
|
|
|
50
32
|
load 'Rakefile.cross'
|
|
51
33
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
$hoespec = Hoe.spec 'pg' do
|
|
55
|
-
self.readme_file = 'README.rdoc'
|
|
56
|
-
self.history_file = 'History.rdoc'
|
|
57
|
-
self.extra_rdoc_files = Rake::FileList[ '*.rdoc' ]
|
|
58
|
-
self.extra_rdoc_files.include( 'POSTGRES', 'LICENSE' )
|
|
59
|
-
self.extra_rdoc_files.include( 'ext/*.c' )
|
|
60
|
-
self.license 'BSD-2-Clause'
|
|
61
|
-
|
|
62
|
-
self.developer 'Michael Granger', 'ged@FaerieMUD.org'
|
|
63
|
-
self.developer 'Lars Kanis', 'lars@greiz-reinsdorf.de'
|
|
64
|
-
|
|
65
|
-
self.dependency 'rake-compiler', '~> 1.0', :developer
|
|
66
|
-
self.dependency 'rake-compiler-dock', ['~> 1.0'], :developer
|
|
67
|
-
self.dependency 'hoe-deveiate', '~> 0.9', :developer
|
|
68
|
-
self.dependency 'hoe-bundler', '~> 1.0', :developer
|
|
69
|
-
self.dependency 'rspec', '~> 3.5', :developer
|
|
70
|
-
self.dependency 'rdoc', '~> 5.1', :developer
|
|
71
|
-
|
|
72
|
-
self.spec_extras[:extensions] = [ 'ext/extconf.rb' ]
|
|
73
|
-
|
|
74
|
-
self.require_ruby_version( '>= 2.2' )
|
|
75
|
-
|
|
76
|
-
self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags= )
|
|
77
|
-
self.check_history_on_release = true if self.respond_to?( :check_history_on_release= )
|
|
78
|
-
|
|
79
|
-
self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
ENV['VERSION'] ||= $hoespec.spec.version.to_s
|
|
83
|
-
|
|
84
|
-
# Tests should pass before checking in
|
|
85
|
-
task 'hg:precheckin' => [ :check_history, :check_manifest, :spec, :gemspec ]
|
|
86
|
-
|
|
87
|
-
# Support for 'rvm specs'
|
|
88
|
-
task :specs => :spec
|
|
89
|
-
|
|
90
|
-
# Compile before testing
|
|
91
|
-
task :spec => :compile
|
|
92
|
-
|
|
93
|
-
# gem-testers support
|
|
94
|
-
task :test do
|
|
95
|
-
# rake-compiler always wants to copy the compiled extension into lib/, but
|
|
96
|
-
# we don't want testers to have to re-compile, especially since that
|
|
97
|
-
# often fails because they can't (and shouldn't have to) write to tmp/ in
|
|
98
|
-
# the installed gem dir. So we clear the task rake-compiler set up
|
|
99
|
-
# to break the dependency between :spec and :compile when running under
|
|
100
|
-
# rubygems-test, and then run :spec.
|
|
101
|
-
Rake::Task[ EXT.to_s ].clear if File.exist?(EXT.to_s)
|
|
102
|
-
Rake::Task[ :spec ].execute
|
|
103
|
-
end
|
|
34
|
+
Bundler::GemHelper.install_tasks
|
|
35
|
+
$gem_spec = Bundler.load_gemspec(GEMSPEC)
|
|
104
36
|
|
|
105
37
|
desc "Turn on warnings and debugging in the build."
|
|
106
38
|
task :maint do
|
|
@@ -110,7 +42,7 @@ end
|
|
|
110
42
|
# Rake-compiler task
|
|
111
43
|
Rake::ExtensionTask.new do |ext|
|
|
112
44
|
ext.name = 'pg_ext'
|
|
113
|
-
ext.gem_spec = $
|
|
45
|
+
ext.gem_spec = $gem_spec
|
|
114
46
|
ext.ext_dir = 'ext'
|
|
115
47
|
ext.lib_dir = 'lib'
|
|
116
48
|
ext.source_pattern = "*.{c,h}"
|
|
@@ -135,58 +67,31 @@ Rake::ExtensionTask.new do |ext|
|
|
|
135
67
|
end
|
|
136
68
|
end
|
|
137
69
|
|
|
70
|
+
RSpec::Core::RakeTask.new(:spec).rspec_opts = "--profile -cfdoc"
|
|
71
|
+
task :test => :spec
|
|
138
72
|
|
|
139
73
|
# Use the fivefish formatter for docs generated from development checkout
|
|
140
|
-
|
|
141
|
-
require 'rdoc/task'
|
|
142
|
-
|
|
143
|
-
Rake::Task[ 'docs' ].clear
|
|
144
|
-
RDoc::Task.new( 'docs' ) do |rdoc|
|
|
145
|
-
rdoc.main = "README.rdoc"
|
|
146
|
-
rdoc.rdoc_files.include( "*.rdoc", "ChangeLog", "lib/**/*.rb", 'ext/**/*.{c,h}' )
|
|
147
|
-
rdoc.generator = :fivefish
|
|
148
|
-
rdoc.title = "PG: The Ruby PostgreSQL Driver"
|
|
149
|
-
rdoc.rdoc_dir = 'doc'
|
|
150
|
-
end
|
|
151
|
-
end
|
|
74
|
+
require 'rdoc/task'
|
|
152
75
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
Rake::Task["ChangeLog"].clear
|
|
159
|
-
file 'ChangeLog' do |task|
|
|
160
|
-
if File.exist?('.hg/branch')
|
|
161
|
-
$stderr.puts "Updating the changelog..."
|
|
162
|
-
begin
|
|
163
|
-
include Hoe::MercurialHelpers
|
|
164
|
-
content = make_changelog()
|
|
165
|
-
rescue NameError
|
|
166
|
-
abort "Packaging tasks require the hoe-mercurial plugin (gem install hoe-mercurial)"
|
|
167
|
-
end
|
|
168
|
-
File.open( task.name, 'w', 0644 ) do |fh|
|
|
169
|
-
fh.print( content )
|
|
170
|
-
end
|
|
171
|
-
else
|
|
172
|
-
touch 'ChangeLog'
|
|
173
|
-
end
|
|
76
|
+
RDoc::Task.new( 'docs' ) do |rdoc|
|
|
77
|
+
rdoc.options = $gem_spec.rdoc_options
|
|
78
|
+
rdoc.rdoc_files = $gem_spec.extra_rdoc_files
|
|
79
|
+
rdoc.generator = :fivefish
|
|
80
|
+
rdoc.rdoc_dir = 'doc'
|
|
174
81
|
end
|
|
175
82
|
|
|
176
|
-
|
|
177
|
-
task :
|
|
178
|
-
|
|
83
|
+
desc "Build the source gem #{$gem_spec.full_name}.gem into the pkg directory"
|
|
84
|
+
task :gem => :build
|
|
179
85
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
Rake::Task[:clean].invoke
|
|
86
|
+
task :clobber do
|
|
87
|
+
puts "Stop any Postmaster instances that remain after testing."
|
|
88
|
+
require_relative 'spec/helpers'
|
|
89
|
+
PG::TestingHelpers.stop_existing_postmasters()
|
|
185
90
|
end
|
|
186
91
|
|
|
187
92
|
desc "Update list of server error codes"
|
|
188
93
|
task :update_error_codes do
|
|
189
|
-
URL_ERRORCODES_TXT = "http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;f=src/backend/utils/errcodes.txt;hb=refs/tags/
|
|
94
|
+
URL_ERRORCODES_TXT = "http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;f=src/backend/utils/errcodes.txt;hb=refs/tags/REL_15_0"
|
|
190
95
|
|
|
191
96
|
ERRORCODES_TXT = "ext/errorcodes.txt"
|
|
192
97
|
sh "wget #{URL_ERRORCODES_TXT.inspect} -O #{ERRORCODES_TXT.inspect} || curl #{URL_ERRORCODES_TXT.inspect} -o #{ERRORCODES_TXT.inspect}"
|
|
@@ -199,19 +104,12 @@ file 'ext/pg_errors.c' => ['ext/errorcodes.def'] do
|
|
|
199
104
|
touch 'ext/pg_errors.c'
|
|
200
105
|
end
|
|
201
106
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
spec.signing_key = nil
|
|
208
|
-
spec.version = "#{spec.version.bump}.0.pre#{Time.now.strftime("%Y%m%d%H%M%S")}"
|
|
209
|
-
spec.cert_chain = [ 'certs/ged.pem' ]
|
|
210
|
-
File.open( task.name, 'w' ) do |fh|
|
|
211
|
-
fh.write( spec.to_ruby )
|
|
212
|
-
end
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
CLOBBER.include( '*.gemspec' )
|
|
216
|
-
task :default => :gemspec
|
|
107
|
+
desc "Translate readme"
|
|
108
|
+
task :translate do
|
|
109
|
+
cd "translation" do
|
|
110
|
+
# po4a's lexer might change, so record its version for reference
|
|
111
|
+
sh "LANG=C po4a --version > .po4a-version"
|
|
217
112
|
|
|
113
|
+
sh "po4a po4a.cfg"
|
|
114
|
+
end
|
|
115
|
+
end
|
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()
|
|
@@ -29,8 +31,8 @@ class CrossLibrary < OpenStruct
|
|
|
29
31
|
self.host_platform = toolchain
|
|
30
32
|
|
|
31
33
|
# Cross-compilation constants
|
|
32
|
-
self.openssl_version = ENV['OPENSSL_VERSION'] || '
|
|
33
|
-
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '
|
|
34
|
+
self.openssl_version = ENV['OPENSSL_VERSION'] || '3.1.0'
|
|
35
|
+
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '15.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.
|
|
@@ -125,7 +127,7 @@ class CrossLibrary < OpenStruct
|
|
|
125
127
|
file openssl_makefile => static_openssl_builddir do |t|
|
|
126
128
|
chdir( static_openssl_builddir ) do
|
|
127
129
|
cmd = cmd_prelude.dup
|
|
128
|
-
cmd << "./Configure" << openssl_config
|
|
130
|
+
cmd << "./Configure" << "-static" << openssl_config
|
|
129
131
|
|
|
130
132
|
run( *cmd )
|
|
131
133
|
end
|
|
@@ -144,14 +146,10 @@ class CrossLibrary < OpenStruct
|
|
|
144
146
|
end
|
|
145
147
|
|
|
146
148
|
desc "compile static #{libssl}"
|
|
147
|
-
file libssl => "compile_static_openssl:#{for_platform}"
|
|
148
|
-
rm t.name.gsub(/\.a$/, ".dll.a")
|
|
149
|
-
end
|
|
149
|
+
file libssl => "compile_static_openssl:#{for_platform}"
|
|
150
150
|
|
|
151
151
|
desc "compile static #{libcrypto}"
|
|
152
|
-
file libcrypto => "compile_static_openssl:#{for_platform}"
|
|
153
|
-
rm t.name.gsub(/\.a$/, ".dll.a")
|
|
154
|
-
end
|
|
152
|
+
file libcrypto => "compile_static_openssl:#{for_platform}"
|
|
155
153
|
|
|
156
154
|
|
|
157
155
|
|
|
@@ -194,7 +192,7 @@ class CrossLibrary < OpenStruct
|
|
|
194
192
|
cmd << "CFLAGS=-L#{static_openssl_builddir}"
|
|
195
193
|
cmd << "LDFLAGS=-L#{static_openssl_builddir}"
|
|
196
194
|
cmd << "LDFLAGS_SL=-L#{static_openssl_builddir}"
|
|
197
|
-
cmd << "LIBS=-lwsock32 -lgdi32 -lws2_32"
|
|
195
|
+
cmd << "LIBS=-lwsock32 -lgdi32 -lws2_32 -lcrypt32"
|
|
198
196
|
cmd << "CPPFLAGS=-I#{static_openssl_builddir}/include"
|
|
199
197
|
|
|
200
198
|
run( *cmd )
|
|
@@ -250,6 +248,7 @@ class CrossLibrary < OpenStruct
|
|
|
250
248
|
end
|
|
251
249
|
|
|
252
250
|
CrossLibraries = [
|
|
251
|
+
['x64-mingw-ucrt', 'mingw64', 'x86_64-w64-mingw32'],
|
|
253
252
|
['x86-mingw32', 'mingw', 'i686-w64-mingw32'],
|
|
254
253
|
['x64-mingw32', 'mingw64', 'x86_64-w64-mingw32'],
|
|
255
254
|
].map do |platform, openssl_config, toolchain|
|
|
@@ -272,7 +271,7 @@ task 'gem:windows:prepare' do
|
|
|
272
271
|
require 'io/console'
|
|
273
272
|
require 'rake_compiler_dock'
|
|
274
273
|
|
|
275
|
-
# Copy gem signing key and certs to be
|
|
274
|
+
# Copy gem signing key and certs to be accessible from the docker container
|
|
276
275
|
mkdir_p 'build/gem'
|
|
277
276
|
sh "cp ~/.gem/gem-*.pem build/gem/ || true"
|
|
278
277
|
sh "bundle package"
|
|
@@ -287,11 +286,11 @@ end
|
|
|
287
286
|
CrossLibraries.each do |xlib|
|
|
288
287
|
platform = xlib.for_platform
|
|
289
288
|
desc "Build fat binary gem for platform #{platform}"
|
|
290
|
-
task "gem:windows:#{platform}" => ['
|
|
289
|
+
task "gem:windows:#{platform}" => ['gem:windows:prepare', xlib.openssl_tarball, xlib.postgresql_tarball] do
|
|
291
290
|
RakeCompilerDock.sh <<-EOT, platform: platform
|
|
292
291
|
(cp build/gem/gem-*.pem ~/.gem/ || true) &&
|
|
293
292
|
bundle install --local &&
|
|
294
|
-
rake native:#{platform} pkg/#{$
|
|
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
|
|
295
294
|
EOT
|
|
296
295
|
end
|
|
297
296
|
desc "Build the windows binary gems"
|
data/certs/ged.pem
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIID+DCCAmCgAwIBAgIBBDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdnZWQv
|
|
3
|
+
REM9RmFlcmllTVVEL0RDPW9yZzAeFw0yMjAxMDcyMzU4MTRaFw0yMzAxMDcyMzU4
|
|
4
|
+
MTRaMCIxIDAeBgNVBAMMF2dlZC9EQz1GYWVyaWVNVUQvREM9b3JnMIIBojANBgkq
|
|
5
|
+
hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvyVhkRzvlEs0fe7145BYLfN6njX9ih5H
|
|
6
|
+
L60U0p0euIurpv84op9CNKF9tx+1WKwyQvQP7qFGuZxkSUuWcP/sFhDXL1lWUuIl
|
|
7
|
+
M4uHbGCRmOshDrF4dgnBeOvkHr1fIhPlJm5FO+Vew8tSQmlDsosxLUx+VB7DrVFO
|
|
8
|
+
5PU2AEbf04GGSrmqADGWXeaslaoRdb1fu/0M5qfPTRn5V39sWD9umuDAF9qqil/x
|
|
9
|
+
Sl6phTvgBrG8GExHbNZpLARd3xrBYLEFsX7RvBn2UPfgsrtvpdXjsHGfpT3IPN+B
|
|
10
|
+
vQ66lts4alKC69TE5cuKasWBm+16A4aEe3XdZBRNmtOu/g81gvwA7fkJHKllJuaI
|
|
11
|
+
dXzdHqq+zbGZVSQ7pRYHYomD0IiDe1DbIouFnPWmagaBnGHwXkDT2bKKP+s2v21m
|
|
12
|
+
ozilJg4aar2okb/RA6VS87o+d7g6LpDDMMQjH4G9OPnJENLdhu8KnPw/ivSVvQw7
|
|
13
|
+
N2I4L/ZOIe2DIVuYH7aLHfjZDQv/mNgpAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYD
|
|
14
|
+
VR0PBAQDAgSwMB0GA1UdDgQWBBRyjf55EbrHagiRLqt5YAd3yb8k4DANBgkqhkiG
|
|
15
|
+
9w0BAQsFAAOCAYEASrm1AbEoxACZ9WXJH3R5axV3U0CA4xaETlL2YT+2nOfVBMQ9
|
|
16
|
+
0ZlkPx6j4ghKJgAIi1TMfDM2JyPJsppQh8tiNccDjWc62UZRY/dq26cMqf/lcI+a
|
|
17
|
+
6YBuEYvzZfearwVs8tHnXtwYV3WSCoCOQaB+nq2lA1O+nkKNl41WOsVbNama5jx3
|
|
18
|
+
8cQtVSEEmZy6jIDJ8c5TmBJ7BQUDEUEWA/A3V42Xyctoj7DvUXWE0lP+X6ypAVSr
|
|
19
|
+
lFh3TS64D7NTvxkmg7natUoCvobl6kGl4yMaqE4YRTlfuzhpf91TSOntClqrAOsS
|
|
20
|
+
K1s56WndQj3IoBocdY9mQhDZLtLHofSkymoP8btBlj5SsN24TiF0VMSZlctSCYZg
|
|
21
|
+
GKyHim/MMlIfGOWsgfioq5jzwmql7W4CDubbb8Lkg70v+hN2E/MnNVAcNE3gyaGc
|
|
22
|
+
P5YP5BAbNW+gvd3QHRiWTTuhgHrdDnGdXg93N2M5KHn1ug8BtPLQwlcFwEpKnlLn
|
|
23
|
+
btEP+7EplFuoiMfd
|
|
24
|
+
-----END CERTIFICATE-----
|
|
@@ -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-----
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIEBDCCAmygAwIBAgIBAjANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
|
3
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yMzAyMTUxNzQxMTVaFw0yNDAy
|
|
4
|
+
MTUxNzQxMTVaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
|
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
|
+
7EfMFzANBgkqhkiG9w0BAQsFAAOCAYEAQAcuTARfiiVUVx5KURICfdTM2Kd7LhOn
|
|
16
|
+
qt3Vs4ANGvT226LEp3RnQ+kWGQYMRb3cw3LY2TNQRPlnZxE994mgjBscN4fbjXqO
|
|
17
|
+
T0JbVpeszRZa5k1goggbnWT7CO7yU7WcHh13DaSubY7HUpAJn2xz9w2stxQfN/EE
|
|
18
|
+
VMlnDJ1P7mUHAvpK8X9j9h7Xlc1niViT18MYwux8mboVTryrLr+clATUkkM3yBF0
|
|
19
|
+
RV+c34ReW5eXO9Tr6aKTxh/pFC9ggDT6jOxuJgSvG8HWJzVf4NDvMavIas4KYjiI
|
|
20
|
+
BU6CpWaG5NxicqL3BERi52U43HV08br+LNVpb7Rekgve/PJuSFnAR015bhSRXe5U
|
|
21
|
+
vBioD1qW2ZW9tXg8Ww2IfDaO5a1So5Xby51rhNlyo6ATj2NkuLWZUKPKHhAz0TKm
|
|
22
|
+
Dzx/gFSOrRoCt2mXNgrmcAfr386AfaMvCh7cXqdxZwmVo7ILZCYXck0pajvubsDd
|
|
23
|
+
NUIIFkVXvd1odFyK9LF1RFAtxn/iAmpx
|
|
24
|
+
-----END CERTIFICATE-----
|
data/ext/errorcodes.def
CHANGED
|
@@ -306,6 +306,10 @@
|
|
|
306
306
|
VALUE klass = define_error_class( "DuplicateJsonObjectKeyValue", "22" );
|
|
307
307
|
register_error_class( "22030", klass );
|
|
308
308
|
}
|
|
309
|
+
{
|
|
310
|
+
VALUE klass = define_error_class( "InvalidArgumentForSqlJsonDatetimeFunction", "22" );
|
|
311
|
+
register_error_class( "22031", klass );
|
|
312
|
+
}
|
|
309
313
|
{
|
|
310
314
|
VALUE klass = define_error_class( "InvalidJsonText", "22" );
|
|
311
315
|
register_error_class( "22032", klass );
|
|
@@ -362,6 +366,10 @@
|
|
|
362
366
|
VALUE klass = define_error_class( "SqlJsonScalarRequired", "22" );
|
|
363
367
|
register_error_class( "2203F", klass );
|
|
364
368
|
}
|
|
369
|
+
{
|
|
370
|
+
VALUE klass = define_error_class( "SqlJsonItemCannotBeCastToTargetType", "22" );
|
|
371
|
+
register_error_class( "2203G", klass );
|
|
372
|
+
}
|
|
365
373
|
{
|
|
366
374
|
VALUE klass = define_error_class( "IntegrityConstraintViolation", NULL );
|
|
367
375
|
register_error_class( "23000", klass );
|
|
@@ -856,6 +864,10 @@
|
|
|
856
864
|
VALUE klass = define_error_class( "DatabaseDropped", "57" );
|
|
857
865
|
register_error_class( "57P04", klass );
|
|
858
866
|
}
|
|
867
|
+
{
|
|
868
|
+
VALUE klass = define_error_class( "IdleSessionTimeout", "57" );
|
|
869
|
+
register_error_class( "57P05", klass );
|
|
870
|
+
}
|
|
859
871
|
{
|
|
860
872
|
VALUE klass = define_error_class( "SystemError", NULL );
|
|
861
873
|
register_error_class( "58000", klass );
|
data/ext/errorcodes.rb
CHANGED
|
File without changes
|
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-2022, 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
|
|
@@ -207,6 +207,7 @@ Section: Class 22 - Data Exception
|
|
|
207
207
|
2200S E ERRCODE_INVALID_XML_COMMENT invalid_xml_comment
|
|
208
208
|
2200T E ERRCODE_INVALID_XML_PROCESSING_INSTRUCTION invalid_xml_processing_instruction
|
|
209
209
|
22030 E ERRCODE_DUPLICATE_JSON_OBJECT_KEY_VALUE duplicate_json_object_key_value
|
|
210
|
+
22031 E ERRCODE_INVALID_ARGUMENT_FOR_SQL_JSON_DATETIME_FUNCTION invalid_argument_for_sql_json_datetime_function
|
|
210
211
|
22032 E ERRCODE_INVALID_JSON_TEXT invalid_json_text
|
|
211
212
|
22033 E ERRCODE_INVALID_SQL_JSON_SUBSCRIPT invalid_sql_json_subscript
|
|
212
213
|
22034 E ERRCODE_MORE_THAN_ONE_SQL_JSON_ITEM more_than_one_sql_json_item
|
|
@@ -221,6 +222,7 @@ Section: Class 22 - Data Exception
|
|
|
221
222
|
2203D E ERRCODE_TOO_MANY_JSON_ARRAY_ELEMENTS too_many_json_array_elements
|
|
222
223
|
2203E E ERRCODE_TOO_MANY_JSON_OBJECT_MEMBERS too_many_json_object_members
|
|
223
224
|
2203F E ERRCODE_SQL_JSON_SCALAR_REQUIRED sql_json_scalar_required
|
|
225
|
+
2203G E ERRCODE_SQL_JSON_ITEM_CANNOT_BE_CAST_TO_TARGET_TYPE sql_json_item_cannot_be_cast_to_target_type
|
|
224
226
|
|
|
225
227
|
Section: Class 23 - Integrity Constraint Violation
|
|
226
228
|
|
|
@@ -427,6 +429,7 @@ Section: Class 57 - Operator Intervention
|
|
|
427
429
|
57P02 E ERRCODE_CRASH_SHUTDOWN crash_shutdown
|
|
428
430
|
57P03 E ERRCODE_CANNOT_CONNECT_NOW cannot_connect_now
|
|
429
431
|
57P04 E ERRCODE_DATABASE_DROPPED database_dropped
|
|
432
|
+
57P05 E ERRCODE_IDLE_SESSION_TIMEOUT idle_session_timeout
|
|
430
433
|
|
|
431
434
|
Section: Class 58 - System Error (errors external to PostgreSQL itself)
|
|
432
435
|
|
data/ext/extconf.rb
CHANGED
|
@@ -15,6 +15,13 @@ if pgdir = with_config( 'pg' )
|
|
|
15
15
|
ENV['PATH'] = "#{pgdir}/bin" + File::PATH_SEPARATOR + ENV['PATH']
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
if enable_config("gvl-unlock", true)
|
|
19
|
+
$defs.push( "-DENABLE_GVL_UNLOCK" )
|
|
20
|
+
$stderr.puts "Calling libpq with GVL unlocked"
|
|
21
|
+
else
|
|
22
|
+
$stderr.puts "Calling libpq with GVL locked"
|
|
23
|
+
end
|
|
24
|
+
|
|
18
25
|
if enable_config("windows-cross")
|
|
19
26
|
# Avoid dependency to external libgcc.dll on x86-mingw32
|
|
20
27
|
$LDFLAGS << " -static-libgcc"
|
|
@@ -30,35 +37,97 @@ else
|
|
|
30
37
|
|
|
31
38
|
if pgconfig && pgconfig != 'ignore'
|
|
32
39
|
$stderr.puts "Using config values from %s" % [ pgconfig ]
|
|
33
|
-
incdir =
|
|
34
|
-
libdir =
|
|
40
|
+
incdir = IO.popen([pgconfig, "--includedir"], &:read).chomp
|
|
41
|
+
libdir = IO.popen([pgconfig, "--libdir"], &:read).chomp
|
|
35
42
|
dir_config 'pg', incdir, libdir
|
|
36
43
|
|
|
37
|
-
#
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
# Windows traditionally stores DLLs beside executables, not in libdir
|
|
45
|
+
dlldir = RUBY_PLATFORM=~/mingw|mswin/ ? IO.popen([pgconfig, "--bindir"], &:read).chomp : libdir
|
|
46
|
+
|
|
47
|
+
elsif checking_for "libpq per pkg-config" do
|
|
48
|
+
_cflags, ldflags, _libs = pkg_config("libpq")
|
|
49
|
+
dlldir = ldflags && ldflags[/-L([^ ]+)/] && $1
|
|
42
50
|
end
|
|
51
|
+
|
|
43
52
|
else
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
dir_config 'pg'
|
|
53
|
+
incdir, libdir = dir_config 'pg'
|
|
54
|
+
dlldir = libdir
|
|
47
55
|
end
|
|
56
|
+
|
|
57
|
+
# Try to use runtime path linker option, even if RbConfig doesn't know about it.
|
|
58
|
+
# The rpath option is usually set implicit by dir_config(), but so far not
|
|
59
|
+
# on MacOS-X.
|
|
60
|
+
if dlldir && RbConfig::CONFIG["RPATHFLAG"].to_s.empty?
|
|
61
|
+
append_ldflags "-Wl,-rpath,#{dlldir.quote}"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
$stderr.puts "Using libpq from #{dlldir}"
|
|
66
|
+
|
|
67
|
+
File.write("postgresql_lib_path.rb", <<-EOT)
|
|
68
|
+
module PG
|
|
69
|
+
POSTGRESQL_LIB_PATH = #{dlldir.inspect}
|
|
48
70
|
end
|
|
71
|
+
EOT
|
|
72
|
+
$INSTALLFILES = {
|
|
73
|
+
"./postgresql_lib_path.rb" => "$(RUBYLIBDIR)/pg/"
|
|
74
|
+
}
|
|
49
75
|
|
|
50
76
|
if RUBY_VERSION >= '2.3.0' && /solaris/ =~ RUBY_PLATFORM
|
|
51
77
|
append_cppflags( '-D__EXTENSIONS__' )
|
|
52
78
|
end
|
|
53
79
|
|
|
54
|
-
|
|
55
|
-
find_header( 'libpq
|
|
56
|
-
find_header( '
|
|
80
|
+
begin
|
|
81
|
+
find_header( 'libpq-fe.h' ) or abort "Can't find the 'libpq-fe.h header"
|
|
82
|
+
find_header( 'libpq/libpq-fs.h' ) or abort "Can't find the 'libpq/libpq-fs.h header"
|
|
83
|
+
find_header( 'pg_config_manual.h' ) or abort "Can't find the 'pg_config_manual.h' header"
|
|
84
|
+
|
|
85
|
+
abort "Can't find the PostgreSQL client library (libpq)" unless
|
|
86
|
+
have_library( 'pq', 'PQconnectdb', ['libpq-fe.h'] ) ||
|
|
87
|
+
have_library( 'libpq', 'PQconnectdb', ['libpq-fe.h'] ) ||
|
|
88
|
+
have_library( 'ms/libpq', 'PQconnectdb', ['libpq-fe.h'] )
|
|
89
|
+
|
|
90
|
+
rescue SystemExit
|
|
91
|
+
install_text = case RUBY_PLATFORM
|
|
92
|
+
when /linux/
|
|
93
|
+
<<-EOT
|
|
94
|
+
Please install libpq or postgresql client package like so:
|
|
95
|
+
sudo apt install libpq-dev
|
|
96
|
+
sudo yum install postgresql-devel
|
|
97
|
+
sudo zypper in postgresql-devel
|
|
98
|
+
sudo pacman -S postgresql-libs
|
|
99
|
+
EOT
|
|
100
|
+
when /darwin/
|
|
101
|
+
<<-EOT
|
|
102
|
+
Please install libpq or postgresql client package like so:
|
|
103
|
+
brew install libpq
|
|
104
|
+
EOT
|
|
105
|
+
when /mingw/
|
|
106
|
+
<<-EOT
|
|
107
|
+
Please install libpq or postgresql client package like so:
|
|
108
|
+
ridk exec sh -c "pacman -S ${MINGW_PACKAGE_PREFIX}-postgresql"
|
|
109
|
+
EOT
|
|
110
|
+
else
|
|
111
|
+
<<-EOT
|
|
112
|
+
Please install libpq or postgresql client package.
|
|
113
|
+
EOT
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
$stderr.puts <<-EOT
|
|
117
|
+
*****************************************************************************
|
|
118
|
+
|
|
119
|
+
Unable to find PostgreSQL client library.
|
|
120
|
+
|
|
121
|
+
#{install_text}
|
|
122
|
+
or try again with:
|
|
123
|
+
gem install pg -- --with-pg-config=/path/to/pg_config
|
|
57
124
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
125
|
+
or set library paths manually with:
|
|
126
|
+
gem install pg -- --with-pg-include=/path/to/libpq-fe.h/ --with-pg-lib=/path/to/libpq.so/
|
|
127
|
+
|
|
128
|
+
EOT
|
|
129
|
+
raise
|
|
130
|
+
end
|
|
62
131
|
|
|
63
132
|
if /mingw/ =~ RUBY_PLATFORM && RbConfig::MAKEFILE_CONFIG['CC'] =~ /gcc/
|
|
64
133
|
# Work around: https://sourceware.org/bugzilla/show_bug.cgi?id=22504
|
|
@@ -69,21 +138,27 @@ if /mingw/ =~ RUBY_PLATFORM && RbConfig::MAKEFILE_CONFIG['CC'] =~ /gcc/
|
|
|
69
138
|
end
|
|
70
139
|
end
|
|
71
140
|
|
|
72
|
-
|
|
73
|
-
have_func 'PQsetSingleRowMode' or
|
|
141
|
+
have_func 'PQconninfo', 'libpq-fe.h' or
|
|
74
142
|
abort "Your PostgreSQL is too old. Either install an older version " +
|
|
75
|
-
"of this gem or upgrade your database to at least PostgreSQL-9.
|
|
76
|
-
|
|
77
|
-
have_func 'PQsslAttribute' # since PostgreSQL-9.5
|
|
78
|
-
have_func 'PQresultVerboseErrorMessage' # since PostgreSQL-9.6
|
|
79
|
-
have_func 'PQencryptPasswordConn' # since PostgreSQL-10
|
|
80
|
-
have_func 'PQresultMemorySize' # since PostgreSQL-12
|
|
143
|
+
"of this gem or upgrade your database to at least PostgreSQL-9.3."
|
|
144
|
+
# optional headers/functions
|
|
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
|
|
81
153
|
have_func 'timegm'
|
|
82
154
|
have_func 'rb_gc_adjust_memory_usage' # since ruby-2.4
|
|
155
|
+
have_func 'rb_gc_mark_movable' # since ruby-2.7
|
|
156
|
+
have_func 'rb_io_wait' # since ruby-3.0
|
|
83
157
|
|
|
84
158
|
# unistd.h confilicts with ruby/win32.h when cross compiling for win32 and ruby 1.9.1
|
|
85
159
|
have_header 'unistd.h'
|
|
86
160
|
have_header 'inttypes.h'
|
|
161
|
+
have_header('ruby/fiber/scheduler.h') if RUBY_PLATFORM=~/mingw|mswin/
|
|
87
162
|
|
|
88
163
|
checking_for "C99 variable length arrays" do
|
|
89
164
|
$defs.push( "-DHAVE_VARIABLE_LENGTH_ARRAYS" ) if try_compile('void test_vla(int l){ int vla[l]; }')
|
data/ext/gvl_wrappers.c
CHANGED
|
@@ -9,9 +9,13 @@
|
|
|
9
9
|
char *PQencryptPasswordConn(PGconn *conn, const char *passwd, const char *user, const char *algorithm){return NULL;}
|
|
10
10
|
#endif
|
|
11
11
|
|
|
12
|
+
#ifdef ENABLE_GVL_UNLOCK
|
|
12
13
|
FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_WRAPPER_STRUCT );
|
|
13
14
|
FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_SKELETON );
|
|
15
|
+
#endif
|
|
14
16
|
FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB );
|
|
17
|
+
#ifdef ENABLE_GVL_UNLOCK
|
|
15
18
|
FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVL_WRAPPER_STRUCT );
|
|
16
19
|
FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVLCB_SKELETON );
|
|
20
|
+
#endif
|
|
17
21
|
FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVLCB_STUB );
|