pg 1.2.0-x86-mingw32 → 1.3.0.rc1-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.appveyor.yml +36 -0
  4. data/.gems +6 -0
  5. data/.github/workflows/binary-gems.yml +80 -0
  6. data/.github/workflows/source-gem.yml +129 -0
  7. data/.gitignore +13 -0
  8. data/.hgsigs +34 -0
  9. data/.hgtags +41 -0
  10. data/.irbrc +23 -0
  11. data/.pryrc +23 -0
  12. data/.tm_properties +21 -0
  13. data/.travis.yml +49 -0
  14. data/Gemfile +14 -0
  15. data/History.rdoc +98 -7
  16. data/Manifest.txt +0 -1
  17. data/README.rdoc +9 -8
  18. data/Rakefile +31 -140
  19. data/Rakefile.cross +54 -56
  20. data/certs/ged.pem +24 -0
  21. data/ext/errorcodes.def +8 -0
  22. data/ext/errorcodes.txt +3 -1
  23. data/ext/extconf.rb +90 -19
  24. data/ext/gvl_wrappers.c +4 -0
  25. data/ext/gvl_wrappers.h +23 -0
  26. data/ext/pg.c +35 -1
  27. data/ext/pg.h +18 -0
  28. data/ext/pg_coder.c +90 -24
  29. data/ext/pg_connection.c +538 -279
  30. data/ext/pg_copy_coder.c +45 -15
  31. data/ext/pg_record_coder.c +38 -9
  32. data/ext/pg_result.c +70 -34
  33. data/ext/pg_text_decoder.c +1 -1
  34. data/ext/pg_text_encoder.c +6 -6
  35. data/ext/pg_tuple.c +47 -21
  36. data/ext/pg_type_map.c +41 -8
  37. data/ext/pg_type_map_all_strings.c +14 -1
  38. data/ext/pg_type_map_by_class.c +50 -21
  39. data/ext/pg_type_map_by_column.c +64 -28
  40. data/ext/pg_type_map_by_mri_type.c +47 -18
  41. data/ext/pg_type_map_by_oid.c +52 -23
  42. data/ext/pg_type_map_in_ruby.c +50 -19
  43. data/ext/pg_util.c +2 -2
  44. data/lib/2.5/pg_ext.so +0 -0
  45. data/lib/2.6/pg_ext.so +0 -0
  46. data/lib/2.7/pg_ext.so +0 -0
  47. data/lib/3.0/pg_ext.so +0 -0
  48. data/lib/pg/basic_type_map_based_on_result.rb +47 -0
  49. data/lib/pg/basic_type_map_for_queries.rb +193 -0
  50. data/lib/pg/basic_type_map_for_results.rb +81 -0
  51. data/lib/pg/basic_type_registry.rb +296 -0
  52. data/lib/pg/coder.rb +1 -1
  53. data/lib/pg/connection.rb +369 -56
  54. data/lib/pg/version.rb +4 -0
  55. data/lib/pg.rb +38 -24
  56. data/lib/x86-mingw32/libpq.dll +0 -0
  57. data/misc/openssl-pg-segfault.rb +31 -0
  58. data/misc/postgres/History.txt +9 -0
  59. data/misc/postgres/Manifest.txt +5 -0
  60. data/misc/postgres/README.txt +21 -0
  61. data/misc/postgres/Rakefile +21 -0
  62. data/misc/postgres/lib/postgres.rb +16 -0
  63. data/misc/ruby-pg/History.txt +9 -0
  64. data/misc/ruby-pg/Manifest.txt +5 -0
  65. data/misc/ruby-pg/README.txt +21 -0
  66. data/misc/ruby-pg/Rakefile +21 -0
  67. data/misc/ruby-pg/lib/ruby/pg.rb +16 -0
  68. data/pg.gemspec +32 -0
  69. data/sample/array_insert.rb +20 -0
  70. data/sample/async_api.rb +106 -0
  71. data/sample/async_copyto.rb +39 -0
  72. data/sample/async_mixed.rb +56 -0
  73. data/sample/check_conn.rb +21 -0
  74. data/sample/copydata.rb +71 -0
  75. data/sample/copyfrom.rb +81 -0
  76. data/sample/copyto.rb +19 -0
  77. data/sample/cursor.rb +21 -0
  78. data/sample/disk_usage_report.rb +177 -0
  79. data/sample/issue-119.rb +94 -0
  80. data/sample/losample.rb +69 -0
  81. data/sample/minimal-testcase.rb +17 -0
  82. data/sample/notify_wait.rb +72 -0
  83. data/sample/pg_statistics.rb +285 -0
  84. data/sample/replication_monitor.rb +222 -0
  85. data/sample/test_binary_values.rb +33 -0
  86. data/sample/wal_shipper.rb +434 -0
  87. data/sample/warehouse_partitions.rb +311 -0
  88. data.tar.gz.sig +0 -0
  89. metadata +83 -232
  90. metadata.gz.sig +0 -0
  91. data/ChangeLog +0 -0
  92. data/lib/2.2/pg_ext.so +0 -0
  93. data/lib/2.3/pg_ext.so +0 -0
  94. data/lib/2.4/pg_ext.so +0 -0
  95. data/lib/libpq.dll +0 -0
  96. data/lib/pg/basic_type_mapping.rb +0 -522
  97. data/spec/data/expected_trace.out +0 -26
  98. data/spec/data/random_binary_data +0 -0
  99. data/spec/helpers.rb +0 -382
  100. data/spec/pg/basic_type_mapping_spec.rb +0 -645
  101. data/spec/pg/connection_spec.rb +0 -1911
  102. data/spec/pg/connection_sync_spec.rb +0 -41
  103. data/spec/pg/result_spec.rb +0 -681
  104. data/spec/pg/tuple_spec.rb +0 -333
  105. data/spec/pg/type_map_by_class_spec.rb +0 -138
  106. data/spec/pg/type_map_by_column_spec.rb +0 -226
  107. data/spec/pg/type_map_by_mri_type_spec.rb +0 -136
  108. data/spec/pg/type_map_by_oid_spec.rb +0 -149
  109. data/spec/pg/type_map_in_ruby_spec.rb +0 -164
  110. data/spec/pg/type_map_spec.rb +0 -22
  111. data/spec/pg/type_spec.rb +0 -1123
  112. data/spec/pg_spec.rb +0 -50
data/Manifest.txt CHANGED
@@ -1,6 +1,5 @@
1
1
  .gemtest
2
2
  BSDL
3
- ChangeLog
4
3
  Contributors.rdoc
5
4
  History.rdoc
6
5
  LICENSE
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.2 and later}[http://www.postgresql.org/support/versioning/].
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('procpid', 'usename', 'current_query')
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://travis-ci.org/ged/ruby-pg.svg?branch=master" alt="Build Status Travis-CI" />}[https://travis-ci.org/ged/ruby-pg]
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.2 or newer
40
- * PostgreSQL 9.2.x or later (with headers, -dev packages, etc).
40
+ * Ruby 2.4 or newer
41
+ * PostgreSQL 9.3.x or later (with headers, -dev packages, etc).
41
42
 
42
- It usually work with earlier versions of Ruby/PostgreSQL as well, but those are
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
- TEST_DIRECTORY = BASEDIR + "tmp_test_specs"
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
- # Set up Hoe plugins
40
- Hoe.plugin :mercurial
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
- # Hoe specification
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 = $hoespec.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 &:for_platform
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
- if File.directory?( '.hg' )
139
- require 'rdoc/task'
140
-
141
- Rake::Task[ 'docs' ].clear
142
- RDoc::Task.new( 'docs' ) do |rdoc|
143
- rdoc.main = "README.rdoc"
144
- rdoc.rdoc_files.include( "*.rdoc", "ChangeLog", "lib/**/*.rb", 'ext/**/*.{c,h}' )
145
- rdoc.generator = :fivefish
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
- # Make the ChangeLog update if the repo has changed since it was last built
153
- file '.hg/branch' do
154
- warn "WARNING: You need the Mercurial repo to update the ChangeLog"
155
- end
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/REL_12_0"
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.1d'
33
- self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '12.1'
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 :openssl_libs => [ libssl, libcrypto ]
135
+ task "openssl_libs:#{for_platform}" => [ libssl, libcrypto ]
145
136
 
146
- task :compile_static_openssl => openssl_makefile do |t|
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 => :compile_static_openssl do |t|
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 => :compile_static_openssl do |t|
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, :openssl_libs ] do |t|
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 :libpq => postgresql_lib
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
- if File.exist?(File.expand_path("~/.rake-compiler/config.yml"))
252
- CrossLibraries = [
253
- ['i386-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
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
- else
259
- $stderr.puts "Cross-compilation disabled -- rake-compiler not properly installed"
260
- CrossLibraries = []
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, :libpq ]
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
- # To reduce the gem file size strip mingw32 dlls before packaging
276
- ENV['RUBY_CC_VERSION'].to_s.split(':').each do |ruby_version|
277
- task "tmp/i386-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/pg_ext.so" do |t|
278
- sh "i686-w64-mingw32-strip -S tmp/i386-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/pg_ext.so"
279
- end
280
-
281
- task "tmp/x64-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/pg_ext.so" do |t|
282
- sh "x86_64-w64-mingw32-strip -S tmp/x64-mingw32/stage/lib/#{ruby_version[/^\d+\.\d+/]}/pg_ext.so"
283
- end
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
- desc "Build the windows binary gems"
287
- task 'gem:windows' => ['ChangeLog'] do
288
- require 'rake_compiler_dock'
289
-
290
- # Copy gem signing key and certs to be accessable from the docker container
291
- mkdir_p 'build/gem'
292
- sh "cp ~/.gem/gem-*.pem build/gem/ || true"
293
- sh "bundle package"
294
-
295
- RakeCompilerDock.sh <<-EOT
296
- mkdir ~/.gem &&
297
- (cp build/gem/gem-*.pem ~/.gem/ || true) &&
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-2019, PostgreSQL Global Development Group
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