pg 1.2.0-x64-mingw32 → 1.3.0.rc1-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 +36 -0
- data/.gems +6 -0
- data/.github/workflows/binary-gems.yml +80 -0
- data/.github/workflows/source-gem.yml +129 -0
- data/.gitignore +13 -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.rdoc +98 -7
- data/Manifest.txt +0 -1
- data/README.rdoc +9 -8
- data/Rakefile +31 -140
- data/Rakefile.cross +54 -56
- data/certs/ged.pem +24 -0
- data/ext/errorcodes.def +8 -0
- data/ext/errorcodes.txt +3 -1
- data/ext/extconf.rb +90 -19
- data/ext/gvl_wrappers.c +4 -0
- data/ext/gvl_wrappers.h +23 -0
- data/ext/pg.c +35 -1
- data/ext/pg.h +18 -0
- data/ext/pg_coder.c +90 -24
- data/ext/pg_connection.c +538 -279
- data/ext/pg_copy_coder.c +45 -15
- data/ext/pg_record_coder.c +38 -9
- data/ext/pg_result.c +70 -34
- data/ext/pg_text_decoder.c +1 -1
- data/ext/pg_text_encoder.c +6 -6
- data/ext/pg_tuple.c +47 -21
- data/ext/pg_type_map.c +41 -8
- data/ext/pg_type_map_all_strings.c +14 -1
- data/ext/pg_type_map_by_class.c +50 -21
- data/ext/pg_type_map_by_column.c +64 -28
- data/ext/pg_type_map_by_mri_type.c +47 -18
- data/ext/pg_type_map_by_oid.c +52 -23
- data/ext/pg_type_map_in_ruby.c +50 -19
- data/ext/pg_util.c +2 -2
- 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/basic_type_map_based_on_result.rb +47 -0
- data/lib/pg/basic_type_map_for_queries.rb +193 -0
- data/lib/pg/basic_type_map_for_results.rb +81 -0
- data/lib/pg/basic_type_registry.rb +296 -0
- data/lib/pg/coder.rb +1 -1
- data/lib/pg/connection.rb +369 -56
- data/lib/pg/version.rb +4 -0
- data/lib/pg.rb +38 -24
- data/lib/x64-mingw32/libpq.dll +0 -0
- 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 +32 -0
- data/sample/array_insert.rb +20 -0
- data/sample/async_api.rb +106 -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.tar.gz.sig +0 -0
- metadata +83 -232
- metadata.gz.sig +0 -0
- data/ChangeLog +0 -0
- data/lib/2.2/pg_ext.so +0 -0
- data/lib/2.3/pg_ext.so +0 -0
- data/lib/2.4/pg_ext.so +0 -0
- data/lib/libpq.dll +0 -0
- data/lib/pg/basic_type_mapping.rb +0 -522
- data/spec/data/expected_trace.out +0 -26
- data/spec/data/random_binary_data +0 -0
- data/spec/helpers.rb +0 -382
- data/spec/pg/basic_type_mapping_spec.rb +0 -645
- data/spec/pg/connection_spec.rb +0 -1911
- 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/Manifest.txt
CHANGED
data/README.rdoc
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
home :: https://github.com/ged/ruby-pg
|
4
4
|
docs :: http://deveiate.org/code/pg
|
5
|
+
clog :: link:/History.rdoc
|
5
6
|
|
6
7
|
{<img src="https://badges.gitter.im/Join%20Chat.svg" alt="Join the chat at https://gitter.im/ged/ruby-pg">}[https://gitter.im/ged/ruby-pg?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge]
|
7
8
|
|
@@ -10,7 +11,7 @@ docs :: http://deveiate.org/code/pg
|
|
10
11
|
|
11
12
|
Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].
|
12
13
|
|
13
|
-
It works with {PostgreSQL 9.
|
14
|
+
It works with {PostgreSQL 9.3 and later}[http://www.postgresql.org/support/versioning/].
|
14
15
|
|
15
16
|
A small example usage:
|
16
17
|
|
@@ -24,22 +25,22 @@ A small example usage:
|
|
24
25
|
puts " PID | User | Query"
|
25
26
|
result.each do |row|
|
26
27
|
puts " %7d | %-16s | %s " %
|
27
|
-
row.values_at('
|
28
|
+
row.values_at('pid', 'usename', 'query')
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
31
32
|
== Build Status
|
32
33
|
|
33
|
-
{<img src="https://
|
34
|
+
{<img src="https://github.com/ged/ruby-pg/actions/workflows/source-gem.yml/badge.svg?branch=master" alt="Build Status Github Actions" />}[https://github.com/ged/ruby-pg/actions/workflows/source-gem.yml]
|
34
35
|
{<img src="https://ci.appveyor.com/api/projects/status/gjx5axouf3b1wicp?svg=true" alt="Build Status Appveyor" />}[https://ci.appveyor.com/project/ged/ruby-pg-9j8l3]
|
35
|
-
|
36
|
+
{<img src="https://app.travis-ci.com/larskanis/ruby-pg.svg?branch=master" alt="Build Status" />}[https://app.travis-ci.com/larskanis/ruby-pg]
|
36
37
|
|
37
38
|
== Requirements
|
38
39
|
|
39
|
-
* Ruby 2.
|
40
|
-
* PostgreSQL 9.
|
40
|
+
* Ruby 2.4 or newer
|
41
|
+
* PostgreSQL 9.3.x or later (with headers, -dev packages, etc).
|
41
42
|
|
42
|
-
It usually
|
43
|
+
It usually works with earlier versions of Ruby/PostgreSQL as well, but those are
|
43
44
|
not regularly tested.
|
44
45
|
|
45
46
|
|
@@ -118,7 +119,7 @@ PG::Coder objects can be used to set up a PG::TypeMap or alternatively
|
|
118
119
|
to convert single values to/from their string representation.
|
119
120
|
|
120
121
|
The following PostgreSQL column types are supported by ruby-pg (TE = Text Encoder, TD = Text Decoder, BE = Binary Encoder, BD = Binary Decoder):
|
121
|
-
* Integer: {TE}[rdoc-ref:PG::TextEncoder::Integer], {TD}[rdoc-ref:PG::TextDecoder::Integer], {BD}[rdoc-ref:PG::BinaryDecoder::Integer]
|
122
|
+
* Integer: {TE}[rdoc-ref:PG::TextEncoder::Integer], {TD}[rdoc-ref:PG::TextDecoder::Integer], {BD}[rdoc-ref:PG::BinaryDecoder::Integer] 💡 No links? Switch to {here}[https://deveiate.org/code/pg/README_rdoc.html#label-Type+Casts] 💡
|
122
123
|
* BE: {Int2}[rdoc-ref:PG::BinaryEncoder::Int2], {Int4}[rdoc-ref:PG::BinaryEncoder::Int4], {Int8}[rdoc-ref:PG::BinaryEncoder::Int8]
|
123
124
|
* Float: {TE}[rdoc-ref:PG::TextEncoder::Float], {TD}[rdoc-ref:PG::TextDecoder::Float], {BD}[rdoc-ref:PG::BinaryDecoder::Float]
|
124
125
|
* Numeric: {TE}[rdoc-ref:PG::TextEncoder::Numeric], {TD}[rdoc-ref:PG::TextDecoder::Numeric]
|
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,80 +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_specs"
|
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
|
+
CLOBBER.include( TESTDIR.to_s )
|
37
27
|
CLEAN.include( PKGDIR.to_s, TMPDIR.to_s )
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
Hoe.plugin :signing
|
42
|
-
Hoe.plugin :deveiate
|
43
|
-
Hoe.plugin :bundler
|
44
|
-
|
45
|
-
Hoe.plugins.delete :rubyforge
|
46
|
-
Hoe.plugins.delete :compiler
|
28
|
+
CLEAN.include "lib/*/libpq.dll"
|
29
|
+
CLEAN.include "lib/pg_ext.*"
|
30
|
+
CLEAN.include "lib/pg/postgresql_lib_path.rb"
|
47
31
|
|
48
32
|
load 'Rakefile.cross'
|
49
33
|
|
50
|
-
|
51
|
-
|
52
|
-
$hoespec = Hoe.spec 'pg' do
|
53
|
-
self.readme_file = 'README.rdoc'
|
54
|
-
self.history_file = 'History.rdoc'
|
55
|
-
self.extra_rdoc_files = Rake::FileList[ '*.rdoc' ]
|
56
|
-
self.extra_rdoc_files.include( 'POSTGRES', 'LICENSE' )
|
57
|
-
self.extra_rdoc_files.include( 'ext/*.c' )
|
58
|
-
self.license 'BSD-2-Clause'
|
59
|
-
|
60
|
-
self.developer 'Michael Granger', 'ged@FaerieMUD.org'
|
61
|
-
self.developer 'Lars Kanis', 'lars@greiz-reinsdorf.de'
|
62
|
-
|
63
|
-
self.dependency 'rake-compiler', '~> 1.0', :developer
|
64
|
-
self.dependency 'rake-compiler-dock', ['~> 0.7.0'], :developer
|
65
|
-
self.dependency 'hoe-deveiate', '~> 0.9', :developer
|
66
|
-
self.dependency 'hoe-bundler', '~> 1.0', :developer
|
67
|
-
self.dependency 'rspec', '~> 3.5', :developer
|
68
|
-
self.dependency 'rdoc', '~> 5.1', :developer
|
69
|
-
|
70
|
-
self.spec_extras[:extensions] = [ 'ext/extconf.rb' ]
|
71
|
-
|
72
|
-
self.require_ruby_version( '>= 2.2' )
|
73
|
-
|
74
|
-
self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags= )
|
75
|
-
self.check_history_on_release = true if self.respond_to?( :check_history_on_release= )
|
76
|
-
|
77
|
-
self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
|
78
|
-
end
|
79
|
-
|
80
|
-
ENV['VERSION'] ||= $hoespec.spec.version.to_s
|
81
|
-
|
82
|
-
# Tests should pass before checking in
|
83
|
-
task 'hg:precheckin' => [ :check_history, :check_manifest, :spec, :gemspec ]
|
84
|
-
|
85
|
-
# Support for 'rvm specs'
|
86
|
-
task :specs => :spec
|
87
|
-
|
88
|
-
# Compile before testing
|
89
|
-
task :spec => :compile
|
90
|
-
|
91
|
-
# gem-testers support
|
92
|
-
task :test do
|
93
|
-
# rake-compiler always wants to copy the compiled extension into lib/, but
|
94
|
-
# we don't want testers to have to re-compile, especially since that
|
95
|
-
# often fails because they can't (and shouldn't have to) write to tmp/ in
|
96
|
-
# the installed gem dir. So we clear the task rake-compiler set up
|
97
|
-
# to break the dependency between :spec and :compile when running under
|
98
|
-
# rubygems-test, and then run :spec.
|
99
|
-
Rake::Task[ EXT.to_s ].clear if File.exist?(EXT.to_s)
|
100
|
-
Rake::Task[ :spec ].execute
|
101
|
-
end
|
34
|
+
Bundler::GemHelper.install_tasks
|
35
|
+
$gem_spec = Bundler.load_gemspec(GEMSPEC)
|
102
36
|
|
103
37
|
desc "Turn on warnings and debugging in the build."
|
104
38
|
task :maint do
|
@@ -108,12 +42,12 @@ end
|
|
108
42
|
# Rake-compiler task
|
109
43
|
Rake::ExtensionTask.new do |ext|
|
110
44
|
ext.name = 'pg_ext'
|
111
|
-
ext.gem_spec = $
|
45
|
+
ext.gem_spec = $gem_spec
|
112
46
|
ext.ext_dir = 'ext'
|
113
47
|
ext.lib_dir = 'lib'
|
114
48
|
ext.source_pattern = "*.{c,h}"
|
115
49
|
ext.cross_compile = true
|
116
|
-
ext.cross_platform = CrossLibraries.map
|
50
|
+
ext.cross_platform = CrossLibraries.map(&:for_platform)
|
117
51
|
|
118
52
|
ext.cross_config_options += CrossLibraries.map do |lib|
|
119
53
|
{
|
@@ -129,62 +63,36 @@ Rake::ExtensionTask.new do |ext|
|
|
129
63
|
|
130
64
|
# Add libpq.dll to windows binary gemspec
|
131
65
|
ext.cross_compiling do |spec|
|
132
|
-
spec.files << "lib/libpq.dll"
|
66
|
+
spec.files << "lib/#{spec.platform}/libpq.dll"
|
133
67
|
end
|
134
68
|
end
|
135
69
|
|
70
|
+
RSpec::Core::RakeTask.new(:spec).rspec_opts = "--profile -cfdoc"
|
71
|
+
task :test => :spec
|
136
72
|
|
137
73
|
# Use the fivefish formatter for docs generated from development checkout
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
rdoc.title = "PG: The Ruby PostgreSQL Driver"
|
147
|
-
rdoc.rdoc_dir = 'doc'
|
148
|
-
end
|
74
|
+
require 'rdoc/task'
|
75
|
+
|
76
|
+
RDoc::Task.new( 'docs' ) do |rdoc|
|
77
|
+
rdoc.main = "README.rdoc"
|
78
|
+
rdoc.rdoc_files.include( "*.rdoc", "lib/**/*.rb", 'ext/**/*.{c,h}' )
|
79
|
+
rdoc.generator = :fivefish
|
80
|
+
rdoc.title = "PG: The Ruby PostgreSQL Driver"
|
81
|
+
rdoc.rdoc_dir = 'doc'
|
149
82
|
end
|
150
83
|
|
84
|
+
desc "Build the source gem #{$gem_spec.full_name}.gem into the pkg directory"
|
85
|
+
task :gem => :build
|
151
86
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
Rake::Task["ChangeLog"].clear
|
157
|
-
file 'ChangeLog' do |task|
|
158
|
-
if File.exist?('.hg/branch')
|
159
|
-
$stderr.puts "Updating the changelog..."
|
160
|
-
begin
|
161
|
-
include Hoe::MercurialHelpers
|
162
|
-
content = make_changelog()
|
163
|
-
rescue NameError
|
164
|
-
abort "Packaging tasks require the hoe-mercurial plugin (gem install hoe-mercurial)"
|
165
|
-
end
|
166
|
-
File.open( task.name, 'w', 0644 ) do |fh|
|
167
|
-
fh.print( content )
|
168
|
-
end
|
169
|
-
else
|
170
|
-
touch 'ChangeLog'
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
# Rebuild the ChangeLog immediately before release
|
175
|
-
task :prerelease => 'ChangeLog'
|
176
|
-
|
177
|
-
|
178
|
-
desc "Stop any Postmaster instances that remain after testing."
|
179
|
-
task :cleanup_testing_dbs do
|
180
|
-
require 'spec/lib/helpers'
|
181
|
-
PgTestingHelpers.stop_existing_postmasters()
|
182
|
-
Rake::Task[:clean].invoke
|
87
|
+
task :clobber do
|
88
|
+
puts "Stop any Postmaster instances that remain after testing."
|
89
|
+
require_relative 'spec/helpers'
|
90
|
+
PG::TestingHelpers.stop_existing_postmasters()
|
183
91
|
end
|
184
92
|
|
185
93
|
desc "Update list of server error codes"
|
186
94
|
task :update_error_codes do
|
187
|
-
URL_ERRORCODES_TXT = "http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;f=src/backend/utils/errcodes.txt;hb=refs/tags/
|
95
|
+
URL_ERRORCODES_TXT = "http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;f=src/backend/utils/errcodes.txt;hb=refs/tags/REL_14_0"
|
188
96
|
|
189
97
|
ERRORCODES_TXT = "ext/errorcodes.txt"
|
190
98
|
sh "wget #{URL_ERRORCODES_TXT.inspect} -O #{ERRORCODES_TXT.inspect} || curl #{URL_ERRORCODES_TXT.inspect} -o #{ERRORCODES_TXT.inspect}"
|
@@ -196,20 +104,3 @@ file 'ext/pg_errors.c' => ['ext/errorcodes.def'] do
|
|
196
104
|
# trigger compilation of changed errorcodes.def
|
197
105
|
touch 'ext/pg_errors.c'
|
198
106
|
end
|
199
|
-
|
200
|
-
task :gemspec => GEMSPEC
|
201
|
-
file GEMSPEC => __FILE__
|
202
|
-
task GEMSPEC do |task|
|
203
|
-
spec = $hoespec.spec
|
204
|
-
spec.files.delete( '.gemtest' )
|
205
|
-
spec.signing_key = nil
|
206
|
-
spec.version = "#{spec.version.bump}.0.pre#{Time.now.strftime("%Y%m%d%H%M%S")}"
|
207
|
-
spec.cert_chain = [ 'certs/ged.pem' ]
|
208
|
-
File.open( task.name, 'w' ) do |fh|
|
209
|
-
fh.write( spec.to_ruby )
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
CLOBBER.include( '*.gemspec' )
|
214
|
-
task :default => :gemspec
|
215
|
-
|
data/Rakefile.cross
CHANGED
@@ -29,15 +29,15 @@ class CrossLibrary < OpenStruct
|
|
29
29
|
self.host_platform = toolchain
|
30
30
|
|
31
31
|
# Cross-compilation constants
|
32
|
-
self.openssl_version = ENV['OPENSSL_VERSION'] || '1.1.
|
33
|
-
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '
|
32
|
+
self.openssl_version = ENV['OPENSSL_VERSION'] || '1.1.1m'
|
33
|
+
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '14.1'
|
34
34
|
|
35
35
|
# Check if symlinks work in the current working directory.
|
36
36
|
# This fails, if rake-compiler-dock is running on a Windows box.
|
37
37
|
begin
|
38
38
|
FileUtils.rm_f '.test_symlink'
|
39
39
|
FileUtils.ln_s '/', '.test_symlink'
|
40
|
-
rescue SystemCallError
|
40
|
+
rescue NotImplementedError, SystemCallError
|
41
41
|
# Symlinks don't work -> use home directory instead
|
42
42
|
self.compile_home = Pathname( "~/.ruby-pg-build" ).expand_path
|
43
43
|
else
|
@@ -45,6 +45,8 @@ class CrossLibrary < OpenStruct
|
|
45
45
|
end
|
46
46
|
self.static_sourcesdir = compile_home + 'sources'
|
47
47
|
self.static_builddir = compile_home + 'builds' + for_platform
|
48
|
+
CLOBBER.include( static_sourcesdir )
|
49
|
+
CLEAN.include( static_builddir )
|
48
50
|
|
49
51
|
# Static OpenSSL build vars
|
50
52
|
self.static_openssl_builddir = static_builddir + "openssl-#{openssl_version}"
|
@@ -81,17 +83,6 @@ class CrossLibrary < OpenStruct
|
|
81
83
|
# clean intermediate files and folders
|
82
84
|
CLEAN.include( static_builddir.to_s )
|
83
85
|
|
84
|
-
|
85
|
-
def download(url, save_to)
|
86
|
-
part = save_to+".part"
|
87
|
-
sh "wget #{url.to_s.inspect} -O #{part.inspect} || curl #{url.to_s.inspect} -o #{part.inspect}"
|
88
|
-
FileUtils.mv part, save_to
|
89
|
-
end
|
90
|
-
|
91
|
-
def run(*args)
|
92
|
-
sh *args
|
93
|
-
end
|
94
|
-
|
95
86
|
#####################################################################
|
96
87
|
### C R O S S - C O M P I L A T I O N - T A S K S
|
97
88
|
#####################################################################
|
@@ -141,9 +132,9 @@ class CrossLibrary < OpenStruct
|
|
141
132
|
end
|
142
133
|
|
143
134
|
desc "compile static openssl libraries"
|
144
|
-
task
|
135
|
+
task "openssl_libs:#{for_platform}" => [ libssl, libcrypto ]
|
145
136
|
|
146
|
-
task
|
137
|
+
task "compile_static_openssl:#{for_platform}" => openssl_makefile do |t|
|
147
138
|
chdir( static_openssl_builddir ) do
|
148
139
|
cmd = cmd_prelude.dup
|
149
140
|
cmd << 'make' << "-j#{NUM_CPUS}" << 'build_libs'
|
@@ -153,12 +144,12 @@ class CrossLibrary < OpenStruct
|
|
153
144
|
end
|
154
145
|
|
155
146
|
desc "compile static #{libssl}"
|
156
|
-
file libssl =>
|
147
|
+
file libssl => "compile_static_openssl:#{for_platform}" do |t|
|
157
148
|
rm t.name.gsub(/\.a$/, ".dll.a")
|
158
149
|
end
|
159
150
|
|
160
151
|
desc "compile static #{libcrypto}"
|
161
|
-
file libcrypto =>
|
152
|
+
file libcrypto => "compile_static_openssl:#{for_platform}" do |t|
|
162
153
|
rm t.name.gsub(/\.a$/, ".dll.a")
|
163
154
|
end
|
164
155
|
|
@@ -189,7 +180,7 @@ class CrossLibrary < OpenStruct
|
|
189
180
|
end
|
190
181
|
|
191
182
|
# generate the makefile in a clean build location
|
192
|
-
file postgresql_global_makefile => [ static_postgresql_builddir,
|
183
|
+
file postgresql_global_makefile => [ static_postgresql_builddir, "openssl_libs:#{for_platform}" ] do |t|
|
193
184
|
options = [
|
194
185
|
"--target=#{host_platform}",
|
195
186
|
"--host=#{host_platform}",
|
@@ -231,10 +222,10 @@ class CrossLibrary < OpenStruct
|
|
231
222
|
|
232
223
|
|
233
224
|
#desc 'compile libpg.a'
|
234
|
-
task
|
225
|
+
task "native:#{for_platform}" => postgresql_lib
|
235
226
|
|
236
227
|
# copy libpq.dll to lib dir
|
237
|
-
dest_libpq = "lib/#{postgresql_lib.basename}"
|
228
|
+
dest_libpq = "lib/#{for_platform}/#{postgresql_lib.basename}"
|
238
229
|
directory File.dirname(dest_libpq)
|
239
230
|
file dest_libpq => [postgresql_lib, File.dirname(dest_libpq)] do
|
240
231
|
cp postgresql_lib, dest_libpq
|
@@ -246,22 +237,27 @@ class CrossLibrary < OpenStruct
|
|
246
237
|
cp postgresql_lib, stage_libpq
|
247
238
|
end
|
248
239
|
end
|
249
|
-
end
|
250
240
|
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
].map do |platform, openssl_config, toolchain|
|
256
|
-
CrossLibrary.new platform, openssl_config, toolchain
|
241
|
+
def download(url, save_to)
|
242
|
+
part = save_to+".part"
|
243
|
+
sh "wget #{url.to_s.inspect} -O #{part.inspect} || curl #{url.to_s.inspect} -o #{part.inspect}"
|
244
|
+
FileUtils.mv part, save_to
|
257
245
|
end
|
258
|
-
|
259
|
-
|
260
|
-
|
246
|
+
|
247
|
+
def run(*args)
|
248
|
+
sh(*args)
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
CrossLibraries = [
|
253
|
+
['x86-mingw32', 'mingw', 'i686-w64-mingw32'],
|
254
|
+
['x64-mingw32', 'mingw64', 'x86_64-w64-mingw32'],
|
255
|
+
].map do |platform, openssl_config, toolchain|
|
256
|
+
CrossLibrary.new platform, openssl_config, toolchain
|
261
257
|
end
|
262
258
|
|
263
259
|
desc 'cross compile pg for win32'
|
264
|
-
task :cross => [ :mingw32
|
260
|
+
task :cross => [ :mingw32 ]
|
265
261
|
|
266
262
|
task :mingw32 do
|
267
263
|
# Use Rake::ExtensionCompiler helpers to find the proper host
|
@@ -272,30 +268,32 @@ task :mingw32 do
|
|
272
268
|
end
|
273
269
|
end
|
274
270
|
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
271
|
+
task 'gem:windows:prepare' do
|
272
|
+
require 'io/console'
|
273
|
+
require 'rake_compiler_dock'
|
274
|
+
|
275
|
+
# Copy gem signing key and certs to be accessible from the docker container
|
276
|
+
mkdir_p 'build/gem'
|
277
|
+
sh "cp ~/.gem/gem-*.pem build/gem/ || true"
|
278
|
+
sh "bundle package"
|
279
|
+
begin
|
280
|
+
OpenSSL::PKey.read(File.read(File.expand_path("~/.gem/gem-private_key.pem")), ENV["GEM_PRIVATE_KEY_PASSPHRASE"] || "")
|
281
|
+
rescue OpenSSL::PKey::PKeyError
|
282
|
+
ENV["GEM_PRIVATE_KEY_PASSPHRASE"] = STDIN.getpass("Enter passphrase of gem signature key: ")
|
283
|
+
retry
|
284
|
+
end
|
284
285
|
end
|
285
286
|
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
gem install -Ng &&
|
299
|
-
rake cross native gem MAKE="make -j`nproc`"
|
300
|
-
EOT
|
287
|
+
CrossLibraries.each do |xlib|
|
288
|
+
platform = xlib.for_platform
|
289
|
+
desc "Build fat binary gem for platform #{platform}"
|
290
|
+
task "gem:windows:#{platform}" => ['gem:windows:prepare', xlib.openssl_tarball, xlib.postgresql_tarball] do
|
291
|
+
RakeCompilerDock.sh <<-EOT, platform: platform
|
292
|
+
(cp build/gem/gem-*.pem ~/.gem/ || true) &&
|
293
|
+
bundle install --local &&
|
294
|
+
rake native:#{platform} pkg/#{$gem_spec.full_name}-#{platform}.gem MAKE="make -j`nproc`" RUBY_CC_VERSION=3.0.0:2.7.0:2.6.0:2.5.0
|
295
|
+
EOT
|
296
|
+
end
|
297
|
+
desc "Build the windows binary gems"
|
298
|
+
multitask 'gem:windows' => "gem:windows:#{platform}"
|
301
299
|
end
|
data/certs/ged.pem
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIID+DCCAmCgAwIBAgIBAzANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdnZWQv
|
3
|
+
REM9RmFlcmllTVVEL0RDPW9yZzAeFw0yMDEyMjQyMDU1MjlaFw0yMTEyMjQyMDU1
|
4
|
+
MjlaMCIxIDAeBgNVBAMMF2dlZC9EQz1GYWVyaWVNVUQvREM9b3JnMIIBojANBgkq
|
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
|
+
9w0BAQsFAAOCAYEAMYegZanJi8zq7QKPT7wqXefX4C88I5JWeBHR3PvvWK0CwyMV
|
16
|
+
peyiu5I13w/lYX+HUZjE4qsSpJMJFXWl4WZCOo+AMprOcf0PxfuJpxCej5D4tavf
|
17
|
+
vRfhahSw7XJrcZih/3J+/UgoH7R05MJ+8LTcy3HGrB3a0vTafjm8OY7Xpa0LJDoN
|
18
|
+
JDqxK321VIHyTibbKeA1hWSE6ljlQDvFbTqiCj3Ulp1jTv3TOlvRl8fqcfhxUJI0
|
19
|
+
+5Q82jJODjEN+GaWs0V+NlrbU94cXwS2PH5dXogftB5YYA5Ex8A0ikZ73xns4Hdo
|
20
|
+
XxdLdd92F5ovxA23j/rKe/IDwqr6FpDkU3nPXH/Qp0TVGv9zZnVJc/Z6ChkuWj8z
|
21
|
+
pW7JAyyiiHZgKKDReDrA2LA7Zs3o/7KA6UtUH0FHf8LYhcK+pfHk6RtjRe65ffw+
|
22
|
+
MCh97sQ/Z/MOusb5+QddBmB+k8EicXyGNl4b5L4XpL7fIQu+Y96TB3JEJlShxFD9
|
23
|
+
k9FjI4d9EP54gS/4
|
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 );
|
@@ -856,6 +860,10 @@
|
|
856
860
|
VALUE klass = define_error_class( "DatabaseDropped", "57" );
|
857
861
|
register_error_class( "57P04", klass );
|
858
862
|
}
|
863
|
+
{
|
864
|
+
VALUE klass = define_error_class( "IdleSessionTimeout", "57" );
|
865
|
+
register_error_class( "57P05", klass );
|
866
|
+
}
|
859
867
|
{
|
860
868
|
VALUE klass = define_error_class( "SystemError", NULL );
|
861
869
|
register_error_class( "58000", klass );
|
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-2021, 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
|
@@ -427,6 +428,7 @@ Section: Class 57 - Operator Intervention
|
|
427
428
|
57P02 E ERRCODE_CRASH_SHUTDOWN crash_shutdown
|
428
429
|
57P03 E ERRCODE_CANNOT_CONNECT_NOW cannot_connect_now
|
429
430
|
57P04 E ERRCODE_DATABASE_DROPPED database_dropped
|
431
|
+
57P05 E ERRCODE_IDLE_SESSION_TIMEOUT idle_session_timeout
|
430
432
|
|
431
433
|
Section: Class 58 - System Error (errors external to PostgreSQL itself)
|
432
434
|
|