pg 1.5.9 → 1.6.0.rc1

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.
data/lib/pg/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module PG
2
2
  # Library version
3
- VERSION = '1.5.9'
3
+ VERSION = '1.6.0.rc1'
4
4
  end
data/lib/pg.rb CHANGED
@@ -6,11 +6,12 @@
6
6
  module PG
7
7
 
8
8
  # Is this file part of a fat binary gem with bundled libpq?
9
- bundled_libpq_path = File.join(__dir__, RUBY_PLATFORM.gsub(/^i386-/, "x86-"))
10
- if File.exist?(bundled_libpq_path)
9
+ # This path must be enabled by add_dll_directory on Windows.
10
+ gplat = Gem::Platform.local
11
+ bundled_libpq_path = Dir[File.expand_path("../ports/#{gplat.cpu}-#{gplat.os}*/lib", __dir__)].first
12
+ if bundled_libpq_path
11
13
  POSTGRESQL_LIB_PATH = bundled_libpq_path
12
14
  else
13
- bundled_libpq_path = nil
14
15
  # Try to load libpq path as found by extconf.rb
15
16
  begin
16
17
  require "pg/postgresql_lib_path"
@@ -22,7 +23,8 @@ module PG
22
23
  end
23
24
 
24
25
  add_dll_path = proc do |path, &block|
25
- if RUBY_PLATFORM =~/(mswin|mingw)/i && path && File.exist?(path)
26
+ if RUBY_PLATFORM =~/(mswin|mingw)/i && path
27
+ BUNDLED_LIBPQ_WITH_UNIXSOCKET = false
26
28
  begin
27
29
  require 'ruby_installer/runtime'
28
30
  RubyInstaller::Runtime.add_dll_directory(path, &block)
@@ -33,19 +35,21 @@ module PG
33
35
  ENV['PATH'] = old_path
34
36
  end
35
37
  else
36
- # No need to set a load path manually - it's set as library rpath.
38
+ # libpq is found by a relative rpath in the cross compiled extension dll
39
+ # or by the system library loader
37
40
  block.call
41
+ BUNDLED_LIBPQ_WITH_UNIXSOCKET = RUBY_PLATFORM=~/linux/i && PG::IS_BINARY_GEM
38
42
  end
39
43
  end
40
44
 
41
45
  # Add a load path to the one retrieved from pg_config
42
46
  add_dll_path.call(POSTGRESQL_LIB_PATH) do
43
- if bundled_libpq_path
44
- # It's a Windows binary gem, try the <major>.<minor> subdirectory
47
+ begin
48
+ # Try the <major>.<minor> subdirectory for fat binary gems
45
49
  major_minor = RUBY_VERSION[ /^(\d+\.\d+)/ ] or
46
50
  raise "Oops, can't extract the major/minor version from #{RUBY_VERSION.dump}"
47
51
  require "#{major_minor}/pg_ext"
48
- else
52
+ rescue LoadError
49
53
  require 'pg_ext'
50
54
  end
51
55
  end
@@ -111,6 +115,7 @@ module PG
111
115
  require 'pg/coder'
112
116
  require 'pg/type_map_by_column'
113
117
  require 'pg/connection'
118
+ require 'pg/cancel_connection'
114
119
  require 'pg/result'
115
120
  require 'pg/tuple'
116
121
  autoload :VERSION, 'pg/version'
data/pg.gemspec CHANGED
@@ -10,10 +10,10 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["ged@FaerieMUD.org", "lars@greiz-reinsdorf.de"]
11
11
 
12
12
  spec.summary = "Pg is the Ruby interface to the PostgreSQL RDBMS"
13
- spec.description = "Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL 9.3 and later."
13
+ spec.description = "Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL 10 and later."
14
14
  spec.homepage = "https://github.com/ged/ruby-pg"
15
15
  spec.license = "BSD-2-Clause"
16
- spec.required_ruby_version = ">= 2.5"
16
+ spec.required_ruby_version = ">= 2.7"
17
17
 
18
18
  spec.metadata["homepage_uri"] = spec.homepage
19
19
  spec.metadata["source_code_uri"] = "https://github.com/ged/ruby-pg"
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,8 +1,9 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.9
4
+ version: 1.6.0.rc1
5
5
  platform: ruby
6
+ original_platform: ''
6
7
  authors:
7
8
  - Michael Granger
8
9
  - Lars Kanis
@@ -33,10 +34,10 @@ cert_chain:
33
34
  5wFER6XhvvLDFAMh/jMg+s7Wd5SbSHgHNSUaUGVtdWkVPOer6oF0aLdZUR3CETkn
34
35
  5nWXZma/BUd3YgYA/Xumc6QQqIS4p7mr
35
36
  -----END CERTIFICATE-----
36
- date: 2024-10-24 00:00:00.000000000 Z
37
+ date: 2024-11-28 00:00:00.000000000 Z
37
38
  dependencies: []
38
39
  description: Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL
39
- 9.3 and later.
40
+ 10 and later.
40
41
  email:
41
42
  - ged@FaerieMUD.org
42
43
  - lars@greiz-reinsdorf.de
@@ -56,6 +57,7 @@ extra_rdoc_files:
56
57
  - ext/pg.h
57
58
  - ext/pg_binary_decoder.c
58
59
  - ext/pg_binary_encoder.c
60
+ - ext/pg_cancel_connection.c
59
61
  - ext/pg_coder.c
60
62
  - ext/pg_connection.c
61
63
  - ext/pg_copy_coder.c
@@ -82,6 +84,7 @@ extra_rdoc_files:
82
84
  - lib/pg/binary_decoder/date.rb
83
85
  - lib/pg/binary_decoder/timestamp.rb
84
86
  - lib/pg/binary_encoder/timestamp.rb
87
+ - lib/pg/cancel_connection.rb
85
88
  - lib/pg/coder.rb
86
89
  - lib/pg/connection.rb
87
90
  - lib/pg/exceptions.rb
@@ -112,7 +115,6 @@ files:
112
115
  - README.ja.md
113
116
  - README.md
114
117
  - Rakefile
115
- - Rakefile.cross
116
118
  - certs/ged.pem
117
119
  - certs/kanis@comcard.de.pem
118
120
  - certs/larskanis-2022.pem
@@ -128,6 +130,7 @@ files:
128
130
  - ext/pg.h
129
131
  - ext/pg_binary_decoder.c
130
132
  - ext/pg_binary_encoder.c
133
+ - ext/pg_cancel_connection.c
131
134
  - ext/pg_coder.c
132
135
  - ext/pg_connection.c
133
136
  - ext/pg_copy_coder.c
@@ -157,6 +160,7 @@ files:
157
160
  - lib/pg/binary_decoder/date.rb
158
161
  - lib/pg/binary_decoder/timestamp.rb
159
162
  - lib/pg/binary_encoder/timestamp.rb
163
+ - lib/pg/cancel_connection.rb
160
164
  - lib/pg/coder.rb
161
165
  - lib/pg/connection.rb
162
166
  - lib/pg/exceptions.rb
@@ -225,7 +229,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
225
229
  requirements:
226
230
  - - ">="
227
231
  - !ruby/object:Gem::Version
228
- version: '2.5'
232
+ version: '2.7'
229
233
  required_rubygems_version: !ruby/object:Gem::Requirement
230
234
  requirements:
231
235
  - - ">="
metadata.gz.sig CHANGED
Binary file
data/Rakefile.cross DELETED
@@ -1,303 +0,0 @@
1
- # -*- rake -*-
2
-
3
- require 'uri'
4
- require 'tempfile'
5
- require 'rbconfig'
6
- require 'rake/clean'
7
- require 'rake/extensiontask'
8
- require 'rake/extensioncompiler'
9
- require 'ostruct'
10
- require_relative 'rakelib/task_extension'
11
-
12
- MISCDIR = BASEDIR + 'misc'
13
-
14
- NUM_CPUS = if File.exist?('/proc/cpuinfo')
15
- File.read('/proc/cpuinfo').scan('processor').length
16
- elsif RUBY_PLATFORM.include?( 'darwin' )
17
- `system_profiler SPHardwareDataType | grep 'Cores' | awk '{print $5}'`.chomp
18
- else
19
- 1
20
- end
21
-
22
- class CrossLibrary < OpenStruct
23
- include Rake::DSL
24
- prepend TaskExtension
25
-
26
- def initialize(for_platform, openssl_config, toolchain)
27
- super()
28
-
29
- self.for_platform = for_platform
30
- self.openssl_config = openssl_config
31
- self.host_platform = toolchain
32
-
33
- # Cross-compilation constants
34
- self.openssl_version = ENV['OPENSSL_VERSION'] || '3.4.0'
35
- self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '17.0'
36
-
37
- # Check if symlinks work in the current working directory.
38
- # This fails, if rake-compiler-dock is running on a Windows box.
39
- begin
40
- FileUtils.rm_f '.test_symlink'
41
- FileUtils.ln_s '/', '.test_symlink'
42
- rescue NotImplementedError, SystemCallError
43
- # Symlinks don't work -> use home directory instead
44
- self.compile_home = Pathname( "~/.ruby-pg-build" ).expand_path
45
- else
46
- self.compile_home = Pathname( "./build" ).expand_path
47
- end
48
- self.static_sourcesdir = compile_home + 'sources'
49
- self.static_builddir = compile_home + 'builds' + for_platform
50
- CLOBBER.include( static_sourcesdir )
51
- CLEAN.include( static_builddir )
52
-
53
- # Static OpenSSL build vars
54
- self.static_openssl_builddir = static_builddir + "openssl-#{openssl_version}"
55
- self.openssl_source_uri =
56
- URI( "https://github.com/openssl/openssl/releases/download/openssl-#{openssl_version}/openssl-#{openssl_version}.tar.gz" )
57
- self.openssl_tarball = static_sourcesdir + File.basename( openssl_source_uri.path )
58
- self.openssl_makefile = static_openssl_builddir + 'Makefile'
59
-
60
- self.libssl = static_openssl_builddir + 'libssl.a'
61
- self.libcrypto = static_openssl_builddir + 'libcrypto.a'
62
-
63
- self.openssl_patches = Rake::FileList[ (MISCDIR + "openssl-#{openssl_version}.*.patch").to_s ]
64
-
65
- # Static PostgreSQL build vars
66
- self.static_postgresql_builddir = static_builddir + "postgresql-#{postgresql_version}"
67
- self.postgresql_source_uri = begin
68
- uristring = "http://ftp.postgresql.org/pub/source/v%s/postgresql-%s.tar.bz2" %
69
- [ postgresql_version, postgresql_version ]
70
- URI( uristring )
71
- end
72
- self.postgresql_tarball = static_sourcesdir + File.basename( postgresql_source_uri.path )
73
-
74
- self.static_postgresql_srcdir = static_postgresql_builddir + 'src'
75
- self.static_postgresql_libdir = static_postgresql_srcdir + 'interfaces/libpq'
76
- self.static_postgresql_incdir = static_postgresql_srcdir + 'include'
77
-
78
- self.postgresql_global_makefile = static_postgresql_srcdir + 'Makefile.global'
79
- self.postgresql_shlib_makefile = static_postgresql_srcdir + 'Makefile.shlib'
80
- self.postgresql_shlib_mf_orig = static_postgresql_srcdir + 'Makefile.shlib.orig'
81
- self.postgresql_lib = static_postgresql_libdir + 'libpq.dll'
82
- self.postgresql_patches = Rake::FileList[ (MISCDIR + "postgresql-#{postgresql_version}.*.patch").to_s ]
83
-
84
- # clean intermediate files and folders
85
- CLEAN.include( static_builddir.to_s )
86
-
87
- #####################################################################
88
- ### C R O S S - C O M P I L A T I O N - T A S K S
89
- #####################################################################
90
-
91
-
92
- directory static_sourcesdir.to_s
93
-
94
- #
95
- # Static OpenSSL build tasks
96
- #
97
- directory static_openssl_builddir.to_s
98
-
99
- # openssl source file should be stored there
100
- file openssl_tarball => static_sourcesdir do |t|
101
- download( openssl_source_uri, t.name )
102
- end
103
-
104
- # Extract the openssl builds
105
- file static_openssl_builddir => openssl_tarball do |t|
106
- puts "extracting %s to %s" % [ openssl_tarball, static_openssl_builddir.parent ]
107
- static_openssl_builddir.mkpath
108
- run 'tar', '-xzf', openssl_tarball.to_s, '-C', static_openssl_builddir.parent.to_s
109
- openssl_makefile.unlink if openssl_makefile.exist?
110
-
111
- openssl_patches.each do |patchfile|
112
- puts " applying patch #{patchfile}..."
113
- run 'patch', '-Np1', '-d', static_openssl_builddir.to_s,
114
- '-i', File.expand_path( patchfile, BASEDIR )
115
- end
116
- end
117
-
118
- self.cmd_prelude = [
119
- "env",
120
- "CROSS_COMPILE=#{host_platform}-",
121
- "CFLAGS=-DDSO_WIN32 -DOPENSSL_THREADS",
122
- ]
123
-
124
-
125
- # generate the makefile in a clean build location
126
- file openssl_makefile => static_openssl_builddir do |t|
127
- chdir( static_openssl_builddir ) do
128
- cmd = cmd_prelude.dup
129
- cmd << "./Configure" << "threads" << "-static" << openssl_config
130
-
131
- run( *cmd )
132
- end
133
- end
134
-
135
- desc "compile static openssl libraries"
136
- task "openssl_libs:#{for_platform}" => [ libssl, libcrypto ]
137
-
138
- task "compile_static_openssl:#{for_platform}" => openssl_makefile do |t|
139
- chdir( static_openssl_builddir ) do
140
- cmd = cmd_prelude.dup
141
- cmd << 'make' << "-j#{NUM_CPUS}" << 'build_libs'
142
-
143
- run( *cmd )
144
- end
145
- end
146
-
147
- desc "compile static #{libssl}"
148
- file libssl => "compile_static_openssl:#{for_platform}"
149
-
150
- desc "compile static #{libcrypto}"
151
- file libcrypto => "compile_static_openssl:#{for_platform}"
152
-
153
-
154
-
155
- #
156
- # Static PostgreSQL build tasks
157
- #
158
- directory static_postgresql_builddir.to_s
159
-
160
-
161
- # postgresql source file should be stored there
162
- file postgresql_tarball => static_sourcesdir do |t|
163
- download( postgresql_source_uri, t.name )
164
- end
165
-
166
- # Extract the postgresql sources
167
- file static_postgresql_builddir => postgresql_tarball do |t|
168
- puts "extracting %s to %s" % [ postgresql_tarball, static_postgresql_builddir.parent ]
169
- static_postgresql_builddir.mkpath
170
- run 'tar', '-xjf', postgresql_tarball.to_s, '-C', static_postgresql_builddir.parent.to_s
171
-
172
- postgresql_patches.each do |patchfile|
173
- puts " applying patch #{patchfile}..."
174
- run 'patch', '-Np1', '-d', static_postgresql_builddir.to_s,
175
- '-i', File.expand_path( patchfile, BASEDIR )
176
- end
177
- end
178
-
179
- # generate the makefile in a clean build location
180
- file postgresql_global_makefile => [ static_postgresql_builddir, "openssl_libs:#{for_platform}" ] do |t|
181
- options = [
182
- "--target=#{host_platform}",
183
- "--host=#{host_platform}",
184
- '--with-openssl',
185
- '--without-zlib',
186
- '--without-icu',
187
- ]
188
-
189
- chdir( static_postgresql_builddir ) do
190
- configure_path = static_postgresql_builddir + 'configure'
191
- cmd = [ configure_path.to_s, *options ]
192
- cmd << "CFLAGS=-L#{static_openssl_builddir}"
193
- cmd << "LDFLAGS=-L#{static_openssl_builddir}"
194
- cmd << "LDFLAGS_SL=-L#{static_openssl_builddir}"
195
- cmd << "LIBS=-lssl -lwsock32 -lgdi32 -lws2_32 -lcrypt32"
196
- cmd << "CPPFLAGS=-I#{static_openssl_builddir}/include"
197
-
198
- run( *cmd )
199
- end
200
- end
201
-
202
-
203
- # make libpq.dll
204
- task postgresql_lib => [ postgresql_global_makefile ] do |t|
205
- # Work around missing dependency to libcommon in PostgreSQL-9.4.0
206
- chdir( static_postgresql_srcdir + "common" ) do
207
- sh 'make', "-j#{NUM_CPUS}"
208
- end
209
- # Work around missing dependency to errorcodes.h in PostgreSQL-17.0
210
- chdir( static_postgresql_srcdir + "backend" + "utils" ) do
211
- sh 'make', "-j#{NUM_CPUS}"
212
- end
213
- chdir( static_postgresql_srcdir + "port" ) do
214
- sh 'make', "-j#{NUM_CPUS}"
215
- end
216
-
217
- chdir( postgresql_lib.dirname ) do
218
- sh 'make',
219
- "-j#{NUM_CPUS}",
220
- postgresql_lib.basename.to_s,
221
- 'SHLIB_LINK=-lssl -lcrypto -lcrypt32 -lgdi32 -lsecur32 -lwsock32 -lws2_32'
222
- end
223
- end
224
-
225
-
226
- #desc 'compile libpg.a'
227
- task "native:#{for_platform}" => postgresql_lib
228
-
229
- # copy libpq.dll to lib dir
230
- dest_libpq = "lib/#{for_platform}/#{postgresql_lib.basename}"
231
- directory File.dirname(dest_libpq)
232
- file dest_libpq => [postgresql_lib, File.dirname(dest_libpq)] do
233
- cp postgresql_lib, dest_libpq
234
- end
235
-
236
- stage_libpq = "tmp/#{for_platform}/stage/#{dest_libpq}"
237
- directory File.dirname(stage_libpq)
238
- file stage_libpq => [postgresql_lib, File.dirname(stage_libpq)] do |t|
239
- cp postgresql_lib, stage_libpq
240
- end
241
- end
242
-
243
- def download(url, save_to)
244
- part = save_to+".part"
245
- sh "wget #{url.to_s.inspect} -O #{part.inspect} || curl #{url.to_s.inspect} -o #{part.inspect}"
246
- FileUtils.mv part, save_to
247
- end
248
-
249
- def run(*args)
250
- sh(*args)
251
- end
252
- end
253
-
254
- CrossLibraries = [
255
- ['x64-mingw-ucrt', 'mingw64', 'x86_64-w64-mingw32'],
256
- ['x86-mingw32', 'mingw', 'i686-w64-mingw32'],
257
- ['x64-mingw32', 'mingw64', 'x86_64-w64-mingw32'],
258
- ].map do |platform, openssl_config, toolchain|
259
- CrossLibrary.new platform, openssl_config, toolchain
260
- end
261
-
262
- desc 'cross compile pg for win32'
263
- task :cross => [ :mingw32 ]
264
-
265
- task :mingw32 do
266
- # Use Rake::ExtensionCompiler helpers to find the proper host
267
- unless Rake::ExtensionCompiler.mingw_host then
268
- warn "You need to install mingw32 cross compile functionality to be able to continue."
269
- warn "Please refer to your distribution/package manager documentation about installation."
270
- fail
271
- end
272
- end
273
-
274
- task 'gem:windows:prepare' do
275
- require 'io/console'
276
- require 'rake_compiler_dock'
277
-
278
- # Copy gem signing key and certs to be accessible from the docker container
279
- mkdir_p 'build/gem'
280
- sh "cp ~/.gem/gem-*.pem build/gem/ || true"
281
- sh "bundle package"
282
- begin
283
- OpenSSL::PKey.read(File.read(File.expand_path("~/.gem/gem-private_key.pem")), ENV["GEM_PRIVATE_KEY_PASSPHRASE"] || "")
284
- rescue OpenSSL::PKey::PKeyError
285
- ENV["GEM_PRIVATE_KEY_PASSPHRASE"] = STDIN.getpass("Enter passphrase of gem signature key: ")
286
- retry
287
- end
288
- end
289
-
290
- CrossLibraries.each do |xlib|
291
- platform = xlib.for_platform
292
- desc "Build fat binary gem for platform #{platform}"
293
- task "gem:windows:#{platform}" => ['gem:windows:prepare', xlib.openssl_tarball, xlib.postgresql_tarball] do
294
- RakeCompilerDock.sh <<-EOT, platform: platform
295
- (cp build/gem/gem-*.pem ~/.gem/ || true) &&
296
- sudo apt-get update && sudo apt-get install -y bison flex &&
297
- bundle install --local &&
298
- rake native:#{platform} pkg/#{$gem_spec.full_name}-#{platform}.gem MAKEOPTS=-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
299
- EOT
300
- end
301
- desc "Build the windows binary gems"
302
- multitask 'gem:windows' => "gem:windows:#{platform}"
303
- end