pg 1.2.3 → 1.3.1

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.
Files changed (103) 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 +86 -0
  6. data/.github/workflows/source-gem.yml +130 -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 +95 -7
  16. data/Manifest.txt +0 -1
  17. data/README.rdoc +7 -6
  18. data/Rakefile +27 -138
  19. data/Rakefile.cross +6 -5
  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 +91 -19
  24. data/ext/gvl_wrappers.c +4 -0
  25. data/ext/gvl_wrappers.h +23 -0
  26. data/ext/pg.c +59 -4
  27. data/ext/pg.h +18 -1
  28. data/ext/pg_coder.c +82 -28
  29. data/ext/pg_connection.c +673 -493
  30. data/ext/pg_copy_coder.c +45 -16
  31. data/ext/pg_record_coder.c +39 -11
  32. data/ext/pg_result.c +61 -31
  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 +49 -24
  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/pg/basic_type_map_based_on_result.rb +47 -0
  45. data/lib/pg/basic_type_map_for_queries.rb +193 -0
  46. data/lib/pg/basic_type_map_for_results.rb +81 -0
  47. data/lib/pg/basic_type_registry.rb +296 -0
  48. data/lib/pg/coder.rb +1 -1
  49. data/lib/pg/connection.rb +588 -58
  50. data/lib/pg/version.rb +4 -0
  51. data/lib/pg.rb +47 -32
  52. data/misc/openssl-pg-segfault.rb +31 -0
  53. data/misc/postgres/History.txt +9 -0
  54. data/misc/postgres/Manifest.txt +5 -0
  55. data/misc/postgres/README.txt +21 -0
  56. data/misc/postgres/Rakefile +21 -0
  57. data/misc/postgres/lib/postgres.rb +16 -0
  58. data/misc/ruby-pg/History.txt +9 -0
  59. data/misc/ruby-pg/Manifest.txt +5 -0
  60. data/misc/ruby-pg/README.txt +21 -0
  61. data/misc/ruby-pg/Rakefile +21 -0
  62. data/misc/ruby-pg/lib/ruby/pg.rb +16 -0
  63. data/pg.gemspec +32 -0
  64. data/sample/array_insert.rb +20 -0
  65. data/sample/async_api.rb +106 -0
  66. data/sample/async_copyto.rb +39 -0
  67. data/sample/async_mixed.rb +56 -0
  68. data/sample/check_conn.rb +21 -0
  69. data/sample/copydata.rb +71 -0
  70. data/sample/copyfrom.rb +81 -0
  71. data/sample/copyto.rb +19 -0
  72. data/sample/cursor.rb +21 -0
  73. data/sample/disk_usage_report.rb +177 -0
  74. data/sample/issue-119.rb +94 -0
  75. data/sample/losample.rb +69 -0
  76. data/sample/minimal-testcase.rb +17 -0
  77. data/sample/notify_wait.rb +72 -0
  78. data/sample/pg_statistics.rb +285 -0
  79. data/sample/replication_monitor.rb +222 -0
  80. data/sample/test_binary_values.rb +33 -0
  81. data/sample/wal_shipper.rb +434 -0
  82. data/sample/warehouse_partitions.rb +311 -0
  83. data.tar.gz.sig +0 -0
  84. metadata +76 -217
  85. metadata.gz.sig +0 -0
  86. data/ChangeLog +0 -0
  87. data/lib/pg/basic_type_mapping.rb +0 -522
  88. data/spec/data/expected_trace.out +0 -26
  89. data/spec/data/random_binary_data +0 -0
  90. data/spec/helpers.rb +0 -380
  91. data/spec/pg/basic_type_mapping_spec.rb +0 -630
  92. data/spec/pg/connection_spec.rb +0 -1949
  93. data/spec/pg/connection_sync_spec.rb +0 -41
  94. data/spec/pg/result_spec.rb +0 -681
  95. data/spec/pg/tuple_spec.rb +0 -333
  96. data/spec/pg/type_map_by_class_spec.rb +0 -138
  97. data/spec/pg/type_map_by_column_spec.rb +0 -226
  98. data/spec/pg/type_map_by_mri_type_spec.rb +0 -136
  99. data/spec/pg/type_map_by_oid_spec.rb +0 -149
  100. data/spec/pg/type_map_in_ruby_spec.rb +0 -164
  101. data/spec/pg/type_map_spec.rb +0 -22
  102. data/spec/pg/type_spec.rb +0 -1123
  103. data/spec/pg_spec.rb +0 -50
data/History.rdoc CHANGED
@@ -1,3 +1,91 @@
1
+ == v1.3.1 [YYYY-MM-DD] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Bugfixes:
4
+
5
+ - Fix wrong handling of socket writability on Windows introduced in #417.
6
+ This caused starvation in conn.put_copy_data.
7
+ - Fix error in PG.version_string(true). #419
8
+ - Fix a regression in pg 1.3.0 where Ruby 2.x busy-looping any fractional seconds for every wait. #420
9
+
10
+ Enhancements:
11
+
12
+ - Raise an error when conn.copy_data is used in nonblocking mode.
13
+
14
+
15
+ == v1.3.0 [2022-01-20] Michael Granger <ged@FaerieMUD.org>
16
+
17
+ Install Enhancements:
18
+ - Print some install help if libpq wasn't found. #396
19
+ This should help to pick the necessary package without googling.
20
+ - Update Windows fat binary gem to OpenSSL-1.1.1m and PostgreSQL-14.1.
21
+ - Add binary Windows gems for Ruby 3.0 and 3.1.
22
+ - Make the library path of libpq available in ruby as PG::POSTGRESQL_LIB_PATH and add it to the search paths on Windows similar to +rpath+ on Unix systems. #373
23
+ - Fall back to pkg-config if pg_config is not found. #380
24
+ - Add option to extconf.rb to disable nogvl-wrapping of libpq functions.
25
+ All methods (except PG::Connection.ping) are nonblocking now, so that GVL unlock is in theory no longer necessary.
26
+ However it can have some advantage in concurrency, so that GVL unlock is still enabled by default.
27
+ Use:
28
+ - gem inst pg -- --disable-gvl-unlock
29
+
30
+ API Enhancements:
31
+ - Add full compatibility to Fiber.scheduler introduced in Ruby-3.0. #397
32
+ - Add async_connect and async_send methods and add specific specs for Fiber.scheduler #342
33
+ - Add async_get_result and async_get_last_result
34
+ - Add async_get_copy_data
35
+ - Implement async_put_copy_data/async_put_copy_end
36
+ - Implement async_reset method using the nonblocking libpq API
37
+ - Add async_set_client_encoding which is compatible to scheduler
38
+ - Add async_cancel as a nonblocking version of conn#cancel
39
+ - Add async_encrypt_password
40
+ - Run Connection.ping in a second thread.
41
+ - Make discard_results scheduler friendly
42
+ - Do all socket waiting through the conn.socket_io object.
43
+ - Avoid PG.connect blocking while address resolution by automatically providing the +hostaddr+ parameter.
44
+ - On Windows Fiber.scheduler support requires Ruby-3.1+.
45
+ It is also only partly usable since may ruby IO methods are not yet scheduler aware on Windows.
46
+ - Add support for pipeline mode of PostgreSQL-14. #401
47
+ - Allow specification of multiple hosts in PostgreSQL URI. #387
48
+ - Add new method conn.backend_key - used to implement our own cancel method.
49
+
50
+ Type cast enhancements:
51
+ - Add PG::BasicTypeMapForQueries::BinaryData for encoding of bytea columns. #348
52
+ - Reduce time to build coder maps and permit to reuse them for several type maps per PG::BasicTypeRegistry::CoderMapsBundle.new(conn) . #376
53
+ - Make BasicTypeRegistry a class and use a global default instance of it.
54
+ Now a local type registry can be instanciated and given to the type map, to avoid changing shared global states.
55
+ - Allow PG::BasicTypeMapForQueries to take a Proc as callback for undefined types.
56
+
57
+ Other Enhancements:
58
+ - Convert all PG classes implemented in C to TypedData objects. #349
59
+ - Support ObjectSpace.memsize_of(obj) on all classes implemented in C. #393
60
+ - Make all PG objects implemented in C memory moveable and therefore GC.compact friendly. #349
61
+ - Update errorcodes and error classes to PostgreSQL-14.0.
62
+ - Add PG::CONNECTION_* constants for conn.status of newer PostgreSQL versions.
63
+ - Add better support for logical replication. #339
64
+ - Change conn.socket_io to read+write mode and to a BasicSocket object instead of IO.
65
+ - Use rb_io_wait() and the conn.socket_io object if available for better compatibility to Fiber.scheduler .
66
+ Fall back to rb_wait_for_single_fd() on ruby < 3.0.
67
+ - On Windows use a specialized wait function as a workaround for very poor performance of rb_io_wait(). #416
68
+
69
+ Bugfixes:
70
+ - Release GVL while calling PQping which is a blocking method, but it didn't release GVL so far.
71
+ - Fix Connection#transaction to no longer block on interrupts, for instance when pressing Ctrl-C and cancel a running query. #390
72
+ - Avoid casting of OIDs to fix compat with Redshift database. #369
73
+ - Call conn.block before each conn.get_result call to avoid possible blocking in case of a slow network and multiple query results.
74
+ - Sporadic Errno::ENOTSOCK when using conn.socket_io on Windows #398
75
+
76
+ Deprecated:
77
+ - Add deprecation warning to PG::BasicTypeRegistry.register_type and siblings.
78
+
79
+ Removed:
80
+ - Remove support of ruby-2.2, 2.3 and 2.4. Minimum is ruby-2.5 now.
81
+ - Remove support for PostgreSQL-9.2. Minimum is PostgreSQL-9.3 now.
82
+ - Remove constant PG::REVISION, which was broken since pg-1.1.4.
83
+
84
+ Repository:
85
+ - Replace Hoe by Bundler for gem packaging
86
+ - Add Github Actions CI and testing of source and binary gems.
87
+
88
+
1
89
  == v1.2.3 [2020-03-18] Michael Granger <ged@FaerieMUD.org>
2
90
 
3
91
  Bugfixes:
@@ -54,7 +142,7 @@ Other enhancements:
54
142
  - Improve performance of PG::Result#stream_each_tuple .
55
143
  - Store client encoding in data part of PG::Connection and PG::Result objects, so that we no longer use ruby's internal encoding bits. #280
56
144
  - Update Windows fat binary gem to OpenSSL-1.1.1d and PostgreSQL-12.1.
57
- - Add support for TruffleRuby. It is regulary tested as part of our CI.
145
+ - Add support for TruffleRuby. It is regularly tested as part of our CI.
58
146
  - Enable +frozen_string_literal+ in all pg's ruby files
59
147
 
60
148
  Bugfixes:
@@ -117,10 +205,10 @@ Deprecated (disable warnings per PG_SKIP_DEPRECATION_WARNING=1):
117
205
  - Forwarding conn.async_exec_params to conn.async_exec is deprecated.
118
206
 
119
207
  PG::Connection enhancements:
120
- - Provide PG::Connection#sync_* and PG::Connection#async_* query methods for explicit calling syncronous or asynchronous libpq API.
208
+ - Provide PG::Connection#sync_* and PG::Connection#async_* query methods for explicit calling synchronous or asynchronous libpq API.
121
209
  - Make PG::Connection#exec and siblings switchable between sync and async API per PG::Connection.async_api= and change the default to async flavors.
122
210
  - Add async flavors of exec_params, prepare, exec_prepared, describe_prepared and describe_portal.
123
- They are identical to their syncronous counterpart, but make use of PostgreSQL's async API.
211
+ They are identical to their synchronous counterpart, but make use of PostgreSQL's async API.
124
212
  - Replace `rb_thread_fd_select()` by faster `rb_wait_for_single_fd()` in `conn.block` and `conn.async_exec` .
125
213
  - Add PG::Connection#discard_results .
126
214
  - Raise an ArgumentError for strings containing zero bytes by #escape, #escape_literal, #escape_identifier, #quote_ident and PG::TextEncoder::Identifier. These methods previously truncated strings.
@@ -275,7 +363,7 @@ Bugfixes:
275
363
  - Revert addition of PG::Connection#hostaddr [#202].
276
364
  - Fix decoding of fractional timezones and timestamps [#203]
277
365
  - Fixes for non-C99 compilers
278
- - Avoid possible symbol name clash when linking againt static libpq.
366
+ - Avoid possible symbol name clash when linking against static libpq.
279
367
 
280
368
 
281
369
  == v0.18.1 [2015-01-05] Michael Granger <ged@FaerieMUD.org>
@@ -311,7 +399,7 @@ Enhancements:
311
399
  Bugfixes:
312
400
 
313
401
  - Fix compatibility with signal handlers defined in Ruby. This reverts
314
- cancelation of queries running on top of the blocking libpq API (like
402
+ cancellation of queries running on top of the blocking libpq API (like
315
403
  Connection#exec) in case of signals. As an alternative the #async_exec
316
404
  can be used, which is reverted to use the non-blocking API, again.
317
405
  - Wrap PQcancel to be called without GVL. It internally waits for
@@ -389,7 +477,7 @@ Enhancements:
389
477
 
390
478
  - Tested under Ruby 2.0.0p0.
391
479
  - Add single row mode of PostgreSQL 9.2.
392
- - Set fallback_application_name to programm name $0. Thanks to Will Leinweber
480
+ - Set fallback_application_name to program name $0. Thanks to Will Leinweber
393
481
  for the patch.
394
482
  - Release Ruby's GVL while calls to blocking libpq functions to allow better
395
483
  concurrency in threaded applications.
@@ -397,7 +485,7 @@ Enhancements:
397
485
  - Make use of rb_thread_fd_select() on Ruby 1.9 and avoid deprecated
398
486
  rb_thread_select().
399
487
  - Add an example of how to insert array data using a prepared statement (#145).
400
- - Add continous integration tests on travis-ci.org.
488
+ - Add continuous integration tests on travis-ci.org.
401
489
  - Add PG::Result#each_row for iterative over result sets by row. Thanks to
402
490
  Aaron Patterson for the patch.
403
491
  - Add a PG::Connection#socket_io method for fetching a (non-autoclosing) IO
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,20 +25,20 @@ 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
43
  It usually works with earlier versions of Ruby/PostgreSQL as well, but those are
43
44
  not regularly tested.
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_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
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
- # Hoe specification
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 = $hoespec.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,32 @@ 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
- if File.directory?( '.hg' )
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
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'
151
82
  end
152
83
 
84
+ desc "Build the source gem #{$gem_spec.full_name}.gem into the pkg directory"
85
+ task :gem => :build
153
86
 
154
- # Make the ChangeLog update if the repo has changed since it was last built
155
- file '.hg/branch' do
156
- warn "WARNING: You need the Mercurial repo to update the ChangeLog"
157
- end
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
174
- end
175
-
176
- # Rebuild the ChangeLog immediately before release
177
- task :prerelease => 'ChangeLog'
178
-
179
-
180
- desc "Stop any Postmaster instances that remain after testing."
181
- task :cleanup_testing_dbs do
182
- require 'spec/lib/helpers'
183
- PgTestingHelpers.stop_existing_postmasters()
184
- 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()
185
91
  end
186
92
 
187
93
  desc "Update list of server error codes"
188
94
  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/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"
190
96
 
191
97
  ERRORCODES_TXT = "ext/errorcodes.txt"
192
98
  sh "wget #{URL_ERRORCODES_TXT.inspect} -O #{ERRORCODES_TXT.inspect} || curl #{URL_ERRORCODES_TXT.inspect} -o #{ERRORCODES_TXT.inspect}"
@@ -198,20 +104,3 @@ file 'ext/pg_errors.c' => ['ext/errorcodes.def'] do
198
104
  # trigger compilation of changed errorcodes.def
199
105
  touch 'ext/pg_errors.c'
200
106
  end
201
-
202
- task :gemspec => GEMSPEC
203
- file GEMSPEC => __FILE__
204
- task GEMSPEC do |task|
205
- spec = $hoespec.spec
206
- spec.files.delete( '.gemtest' )
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
217
-
data/Rakefile.cross CHANGED
@@ -29,8 +29,8 @@ 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.
@@ -250,6 +250,7 @@ class CrossLibrary < OpenStruct
250
250
  end
251
251
 
252
252
  CrossLibraries = [
253
+ ['x64-mingw-ucrt', 'mingw64', 'x86_64-w64-mingw32'],
253
254
  ['x86-mingw32', 'mingw', 'i686-w64-mingw32'],
254
255
  ['x64-mingw32', 'mingw64', 'x86_64-w64-mingw32'],
255
256
  ].map do |platform, openssl_config, toolchain|
@@ -272,7 +273,7 @@ task 'gem:windows:prepare' do
272
273
  require 'io/console'
273
274
  require 'rake_compiler_dock'
274
275
 
275
- # Copy gem signing key and certs to be accessable from the docker container
276
+ # Copy gem signing key and certs to be accessible from the docker container
276
277
  mkdir_p 'build/gem'
277
278
  sh "cp ~/.gem/gem-*.pem build/gem/ || true"
278
279
  sh "bundle package"
@@ -287,11 +288,11 @@ end
287
288
  CrossLibraries.each do |xlib|
288
289
  platform = xlib.for_platform
289
290
  desc "Build fat binary gem for platform #{platform}"
290
- task "gem:windows:#{platform}" => ['ChangeLog', 'gem:windows:prepare', xlib.openssl_tarball, xlib.postgresql_tarball] do
291
+ task "gem:windows:#{platform}" => ['gem:windows:prepare', xlib.openssl_tarball, xlib.postgresql_tarball] do
291
292
  RakeCompilerDock.sh <<-EOT, platform: platform
292
293
  (cp build/gem/gem-*.pem ~/.gem/ || true) &&
293
294
  bundle install --local &&
294
- rake native:#{platform} pkg/#{$hoespec.spec.full_name}-#{platform}.gem MAKE="make -j`nproc`"
295
+ rake native:#{platform} pkg/#{$gem_spec.full_name}-#{platform}.gem MAKE="make -j`nproc`" RUBY_CC_VERSION=3.1.0:3.0.0:2.7.0:2.6.0:2.5.0
295
296
  EOT
296
297
  end
297
298
  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-----
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