pg 1.2.3 → 1.4.4

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 (110) 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 +131 -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 +209 -7
  16. data/Manifest.txt +0 -1
  17. data/README.rdoc +31 -11
  18. data/Rakefile +27 -138
  19. data/Rakefile.cross +8 -5
  20. data/certs/ged.pem +24 -0
  21. data/certs/larskanis-2022.pem +26 -0
  22. data/ext/errorcodes.def +8 -0
  23. data/ext/errorcodes.rb +0 -0
  24. data/ext/errorcodes.txt +3 -1
  25. data/ext/extconf.rb +100 -25
  26. data/ext/gvl_wrappers.c +4 -0
  27. data/ext/gvl_wrappers.h +23 -0
  28. data/ext/pg.c +59 -29
  29. data/ext/pg.h +20 -1
  30. data/ext/pg_binary_decoder.c +1 -1
  31. data/ext/pg_binary_encoder.c +1 -1
  32. data/ext/pg_coder.c +83 -29
  33. data/ext/pg_connection.c +856 -656
  34. data/ext/pg_copy_coder.c +46 -17
  35. data/ext/pg_errors.c +1 -1
  36. data/ext/pg_record_coder.c +46 -16
  37. data/ext/pg_result.c +88 -49
  38. data/ext/pg_text_decoder.c +2 -2
  39. data/ext/pg_text_encoder.c +7 -7
  40. data/ext/pg_tuple.c +50 -30
  41. data/ext/pg_type_map.c +42 -9
  42. data/ext/pg_type_map_all_strings.c +16 -2
  43. data/ext/pg_type_map_by_class.c +50 -25
  44. data/ext/pg_type_map_by_column.c +68 -30
  45. data/ext/pg_type_map_by_mri_type.c +48 -19
  46. data/ext/pg_type_map_by_oid.c +53 -24
  47. data/ext/pg_type_map_in_ruby.c +51 -20
  48. data/ext/pg_util.c +2 -2
  49. data/lib/pg/basic_type_map_based_on_result.rb +47 -0
  50. data/lib/pg/basic_type_map_for_queries.rb +193 -0
  51. data/lib/pg/basic_type_map_for_results.rb +81 -0
  52. data/lib/pg/basic_type_registry.rb +301 -0
  53. data/lib/pg/coder.rb +1 -1
  54. data/lib/pg/connection.rb +655 -69
  55. data/lib/pg/exceptions.rb +7 -1
  56. data/lib/pg/version.rb +4 -0
  57. data/lib/pg.rb +47 -32
  58. data/misc/openssl-pg-segfault.rb +31 -0
  59. data/misc/postgres/History.txt +9 -0
  60. data/misc/postgres/Manifest.txt +5 -0
  61. data/misc/postgres/README.txt +21 -0
  62. data/misc/postgres/Rakefile +21 -0
  63. data/misc/postgres/lib/postgres.rb +16 -0
  64. data/misc/ruby-pg/History.txt +9 -0
  65. data/misc/ruby-pg/Manifest.txt +5 -0
  66. data/misc/ruby-pg/README.txt +21 -0
  67. data/misc/ruby-pg/Rakefile +21 -0
  68. data/misc/ruby-pg/lib/ruby/pg.rb +16 -0
  69. data/pg.gemspec +32 -0
  70. data/rakelib/task_extension.rb +46 -0
  71. data/sample/array_insert.rb +20 -0
  72. data/sample/async_api.rb +102 -0
  73. data/sample/async_copyto.rb +39 -0
  74. data/sample/async_mixed.rb +56 -0
  75. data/sample/check_conn.rb +21 -0
  76. data/sample/copydata.rb +71 -0
  77. data/sample/copyfrom.rb +81 -0
  78. data/sample/copyto.rb +19 -0
  79. data/sample/cursor.rb +21 -0
  80. data/sample/disk_usage_report.rb +177 -0
  81. data/sample/issue-119.rb +94 -0
  82. data/sample/losample.rb +69 -0
  83. data/sample/minimal-testcase.rb +17 -0
  84. data/sample/notify_wait.rb +72 -0
  85. data/sample/pg_statistics.rb +285 -0
  86. data/sample/replication_monitor.rb +222 -0
  87. data/sample/test_binary_values.rb +33 -0
  88. data/sample/wal_shipper.rb +434 -0
  89. data/sample/warehouse_partitions.rb +311 -0
  90. data.tar.gz.sig +0 -0
  91. metadata +81 -224
  92. metadata.gz.sig +0 -0
  93. data/ChangeLog +0 -0
  94. data/lib/pg/basic_type_mapping.rb +0 -522
  95. data/spec/data/expected_trace.out +0 -26
  96. data/spec/data/random_binary_data +0 -0
  97. data/spec/helpers.rb +0 -380
  98. data/spec/pg/basic_type_mapping_spec.rb +0 -630
  99. data/spec/pg/connection_spec.rb +0 -1949
  100. data/spec/pg/connection_sync_spec.rb +0 -41
  101. data/spec/pg/result_spec.rb +0 -681
  102. data/spec/pg/tuple_spec.rb +0 -333
  103. data/spec/pg/type_map_by_class_spec.rb +0 -138
  104. data/spec/pg/type_map_by_column_spec.rb +0 -226
  105. data/spec/pg/type_map_by_mri_type_spec.rb +0 -136
  106. data/spec/pg/type_map_by_oid_spec.rb +0 -149
  107. data/spec/pg/type_map_in_ruby_spec.rb +0 -164
  108. data/spec/pg/type_map_spec.rb +0 -22
  109. data/spec/pg/type_spec.rb +0 -1123
  110. data/spec/pg_spec.rb +0 -50
data/History.rdoc CHANGED
@@ -1,3 +1,205 @@
1
+ == v1.4.4 [2022-10-11] Lars Kanis <lars@greiz-reinsdorf.de>
2
+
3
+ - Revert to let libpq do the host iteration while connecting. #485
4
+ Ensure that parameter `connect_timeout` is still respected.
5
+ - Handle multiple hosts in the connection string, where only one host has writable session. #476
6
+ - Add some useful information to PG::Connection#inspect. #487
7
+ - Support new pgresult_stream_any API in sequel_pg-1.17.0. #481
8
+ - Update Windows fat binary gem to PostgreSQL-14.5.
9
+
10
+
11
+ == v1.4.3 [2022-08-09] Lars Kanis <lars@greiz-reinsdorf.de>
12
+
13
+ - Avoid memory bloat possible in put_copy_data in pg-1.4.0 to 1.4.2. #473
14
+ - Use Encoding::BINARY for JOHAB, removing some useless code. #472
15
+
16
+
17
+ == v1.4.2 [2022-07-27] Lars Kanis <lars@greiz-reinsdorf.de>
18
+
19
+ Bugfixes:
20
+
21
+ - Properly handle empty host parameter when connecting. #471
22
+ - Update Windows fat binary gem to OpenSSL-1.1.1q.
23
+
24
+
25
+ == v1.4.1 [2022-06-24] Lars Kanis <lars@greiz-reinsdorf.de>
26
+
27
+ Bugfixes:
28
+
29
+ - Fix another ruby-2.7 keyword warning. #465
30
+ - Allow PG::Error to be created without arguments. #466
31
+
32
+
33
+ == v1.4.0 [2022-06-20] Lars Kanis <lars@greiz-reinsdorf.de>
34
+
35
+ Added:
36
+
37
+ - Add PG::Connection#hostaddr, present since PostgreSQL-12. #453
38
+ - Add PG::Connection.conninfo_parse to wrap PQconninfoParse. #453
39
+
40
+ Bugfixes:
41
+
42
+ - Try IPv6 and IPv4 addresses, if DNS resolves to both. #452
43
+ - Re-add block-call semantics to PG::Connection.new accidently removed in pg-1.3.0. #454
44
+ - Handle client error after all data consumed in #copy_data for output. #455
45
+ - Avoid spurious keyword argument warning on Ruby 2.7. #456
46
+ - Change connection setup to respect connect_timeout parameter. #459
47
+ - Fix indefinite hang in case of connection error on Windows #458
48
+ - Set connection attribute of PG::Error in various places where it was missing. #461
49
+ - Fix transaction leak on early break/return. #463
50
+ - Update Windows fat binary gem to OpenSSL-1.1.1o and PostgreSQL-14.4.
51
+
52
+ Enhancements:
53
+
54
+ - Don't flush at each put_copy_data call, but flush at get_result. #462
55
+
56
+
57
+ == v1.3.5 [2022-03-31] Lars Kanis <lars@greiz-reinsdorf.de>
58
+
59
+ Bugfixes:
60
+
61
+ - Handle PGRES_COMMAND_OK in pgresult_stream_any. #447
62
+ Fixes usage when trying to stream the result of a procedure call that returns no results.
63
+
64
+ Enhancements:
65
+
66
+ - Rename BasicTypeRegistry#define_default_types to #register_default_types to use a more consistent terminology.
67
+ Keeping define_default_types for compatibility.
68
+ - BasicTypeRegistry: return self instead of objects by accident.
69
+ This allows call chaining.
70
+ - Add some April fun. #449
71
+
72
+ Documentation:
73
+ - Refine documentation of conn.socket_io and conn.connect_poll
74
+
75
+
76
+ == v1.3.4 [2022-03-10] Lars Kanis <lars@greiz-reinsdorf.de>
77
+
78
+ Bugfixes:
79
+
80
+ - Don't leak IO in case of connection errors. #439
81
+ Previously it was kept open until the PG::Connection was garbage collected.
82
+ - Fix a performance regession in conn.get_result noticed in single row mode. #442
83
+ - Fix occasional error Errno::EBADF (Bad file descriptor) while connecting. #444
84
+ - Fix compatibility of res.stream_each* methods with Fiber.scheduler. #446
85
+ - Remove FL_TEST and FL_SET, which are MRI-internal. #437
86
+
87
+ Enhancements:
88
+
89
+ - Allow pgresult_stream_any to be used by sequel_pg. #443
90
+
91
+
92
+ == v1.3.3 [2022-02-22] Lars Kanis <lars@greiz-reinsdorf.de>
93
+
94
+ Bugfixes:
95
+
96
+ - Fix omission of the third digit of IPv4 addresses in connection URI. #435
97
+ - Fix wrong permission of certs/larskanis-2022.pem in the pg-1.3.2.gem. #432
98
+
99
+
100
+ == v1.3.2 [2022-02-14] Lars Kanis <lars@greiz-reinsdorf.de>
101
+
102
+ Bugfixes:
103
+
104
+ - Cancel only active query after failing transaction. #430
105
+ This avoids an incompatibility with pgbouncer since pg-1.3.0.
106
+ - Fix String objects with non-applied encoding when using COPY or record decoders. #427
107
+ - Update Windows fat binary gem to PostgreSQL-14.2.
108
+
109
+ Enhancements:
110
+
111
+ - Improve extconf.rb checks to reduces the number of compiler calls.
112
+ - Add a check for PGRES_PIPELINE_SYNC, to make sure the library version and the header files are PostgreSQL-14+. #429
113
+
114
+
115
+ == v1.3.1 [2022-02-01] Michael Granger <ged@FaerieMUD.org>
116
+
117
+ Bugfixes:
118
+
119
+ - Fix wrong handling of socket writability on Windows introduced in #417.
120
+ This caused starvation in conn.put_copy_data.
121
+ - Fix error in PG.version_string(true). #419
122
+ - Fix a regression in pg 1.3.0 where Ruby 2.x busy-looping any fractional seconds for every wait. #420
123
+
124
+ Enhancements:
125
+
126
+ - Raise an error when conn.copy_data is used in nonblocking mode.
127
+
128
+
129
+ == v1.3.0 [2022-01-20] Michael Granger <ged@FaerieMUD.org>
130
+
131
+ Install Enhancements:
132
+ - Print some install help if libpq wasn't found. #396
133
+ This should help to pick the necessary package without googling.
134
+ - Update Windows fat binary gem to OpenSSL-1.1.1m and PostgreSQL-14.1.
135
+ - Add binary Windows gems for Ruby 3.0 and 3.1.
136
+ - 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
137
+ - Fall back to pkg-config if pg_config is not found. #380
138
+ - Add option to extconf.rb to disable nogvl-wrapping of libpq functions.
139
+ All methods (except PG::Connection.ping) are nonblocking now, so that GVL unlock is in theory no longer necessary.
140
+ However it can have some advantage in concurrency, so that GVL unlock is still enabled by default.
141
+ Use:
142
+ - gem inst pg -- --disable-gvl-unlock
143
+
144
+ API Enhancements:
145
+ - Add full compatibility to Fiber.scheduler introduced in Ruby-3.0. #397
146
+ - Add async_connect and async_send methods and add specific specs for Fiber.scheduler #342
147
+ - Add async_get_result and async_get_last_result
148
+ - Add async_get_copy_data
149
+ - Implement async_put_copy_data/async_put_copy_end
150
+ - Implement async_reset method using the nonblocking libpq API
151
+ - Add async_set_client_encoding which is compatible to scheduler
152
+ - Add async_cancel as a nonblocking version of conn#cancel
153
+ - Add async_encrypt_password
154
+ - Run Connection.ping in a second thread.
155
+ - Make discard_results scheduler friendly
156
+ - Do all socket waiting through the conn.socket_io object.
157
+ - Avoid PG.connect blocking while address resolution by automatically providing the +hostaddr+ parameter and resolving in Ruby instead of libpq.
158
+ - On Windows Fiber.scheduler support requires Ruby-3.1+.
159
+ It is also only partly usable since may ruby IO methods are not yet scheduler aware on Windows.
160
+ - Add support for pipeline mode of PostgreSQL-14. #401
161
+ - Allow specification of multiple hosts in PostgreSQL URI. #387
162
+ - Add new method conn.backend_key - used to implement our own cancel method.
163
+
164
+ Type cast enhancements:
165
+ - Add PG::BasicTypeMapForQueries::BinaryData for encoding of bytea columns. #348
166
+ - Reduce time to build coder maps and permit to reuse them for several type maps per PG::BasicTypeRegistry::CoderMapsBundle.new(conn) . #376
167
+ - Make BasicTypeRegistry a class and use a global default instance of it.
168
+ Now a local type registry can be instanciated and given to the type map, to avoid changing shared global states.
169
+ - Allow PG::BasicTypeMapForQueries to take a Proc as callback for undefined types.
170
+
171
+ Other Enhancements:
172
+ - Convert all PG classes implemented in C to TypedData objects. #349
173
+ - Support ObjectSpace.memsize_of(obj) on all classes implemented in C. #393
174
+ - Make all PG objects implemented in C memory moveable and therefore GC.compact friendly. #349
175
+ - Update errorcodes and error classes to PostgreSQL-14.0.
176
+ - Add PG::CONNECTION_* constants for conn.status of newer PostgreSQL versions.
177
+ - Add better support for logical replication. #339
178
+ - Change conn.socket_io to read+write mode and to a BasicSocket object instead of IO.
179
+ - Use rb_io_wait() and the conn.socket_io object if available for better compatibility to Fiber.scheduler .
180
+ Fall back to rb_wait_for_single_fd() on ruby < 3.0.
181
+ - On Windows use a specialized wait function as a workaround for very poor performance of rb_io_wait(). #416
182
+
183
+ Bugfixes:
184
+ - Release GVL while calling PQping which is a blocking method, but it didn't release GVL so far.
185
+ - Fix Connection#transaction to no longer block on interrupts, for instance when pressing Ctrl-C and cancel a running query. #390
186
+ - Avoid casting of OIDs to fix compat with Redshift database. #369
187
+ - Call conn.block before each conn.get_result call to avoid possible blocking in case of a slow network and multiple query results.
188
+ - Sporadic Errno::ENOTSOCK when using conn.socket_io on Windows #398
189
+
190
+ Deprecated:
191
+ - Add deprecation warning to PG::BasicTypeRegistry.register_type and siblings.
192
+
193
+ Removed:
194
+ - Remove support of ruby-2.2, 2.3 and 2.4. Minimum is ruby-2.5 now.
195
+ - Remove support for PostgreSQL-9.2. Minimum is PostgreSQL-9.3 now.
196
+ - Remove constant PG::REVISION, which was broken since pg-1.1.4.
197
+
198
+ Repository:
199
+ - Replace Hoe by Bundler for gem packaging
200
+ - Add Github Actions CI and testing of source and binary gems.
201
+
202
+
1
203
  == v1.2.3 [2020-03-18] Michael Granger <ged@FaerieMUD.org>
2
204
 
3
205
  Bugfixes:
@@ -54,7 +256,7 @@ Other enhancements:
54
256
  - Improve performance of PG::Result#stream_each_tuple .
55
257
  - 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
258
  - 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.
259
+ - Add support for TruffleRuby. It is regularly tested as part of our CI.
58
260
  - Enable +frozen_string_literal+ in all pg's ruby files
59
261
 
60
262
  Bugfixes:
@@ -117,10 +319,10 @@ Deprecated (disable warnings per PG_SKIP_DEPRECATION_WARNING=1):
117
319
  - Forwarding conn.async_exec_params to conn.async_exec is deprecated.
118
320
 
119
321
  PG::Connection enhancements:
120
- - Provide PG::Connection#sync_* and PG::Connection#async_* query methods for explicit calling syncronous or asynchronous libpq API.
322
+ - Provide PG::Connection#sync_* and PG::Connection#async_* query methods for explicit calling synchronous or asynchronous libpq API.
121
323
  - 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
324
  - 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.
325
+ They are identical to their synchronous counterpart, but make use of PostgreSQL's async API.
124
326
  - Replace `rb_thread_fd_select()` by faster `rb_wait_for_single_fd()` in `conn.block` and `conn.async_exec` .
125
327
  - Add PG::Connection#discard_results .
126
328
  - 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 +477,7 @@ Bugfixes:
275
477
  - Revert addition of PG::Connection#hostaddr [#202].
276
478
  - Fix decoding of fractional timezones and timestamps [#203]
277
479
  - Fixes for non-C99 compilers
278
- - Avoid possible symbol name clash when linking againt static libpq.
480
+ - Avoid possible symbol name clash when linking against static libpq.
279
481
 
280
482
 
281
483
  == v0.18.1 [2015-01-05] Michael Granger <ged@FaerieMUD.org>
@@ -311,7 +513,7 @@ Enhancements:
311
513
  Bugfixes:
312
514
 
313
515
  - Fix compatibility with signal handlers defined in Ruby. This reverts
314
- cancelation of queries running on top of the blocking libpq API (like
516
+ cancellation of queries running on top of the blocking libpq API (like
315
517
  Connection#exec) in case of signals. As an alternative the #async_exec
316
518
  can be used, which is reverted to use the non-blocking API, again.
317
519
  - Wrap PQcancel to be called without GVL. It internally waits for
@@ -389,7 +591,7 @@ Enhancements:
389
591
 
390
592
  - Tested under Ruby 2.0.0p0.
391
593
  - Add single row mode of PostgreSQL 9.2.
392
- - Set fallback_application_name to programm name $0. Thanks to Will Leinweber
594
+ - Set fallback_application_name to program name $0. Thanks to Will Leinweber
393
595
  for the patch.
394
596
  - Release Ruby's GVL while calls to blocking libpq functions to allow better
395
597
  concurrency in threaded applications.
@@ -397,7 +599,7 @@ Enhancements:
397
599
  - Make use of rb_thread_fd_select() on Ruby 1.9 and avoid deprecated
398
600
  rb_thread_select().
399
601
  - Add an example of how to insert array data using a prepared statement (#145).
400
- - Add continous integration tests on travis-ci.org.
602
+ - Add continuous integration tests on travis-ci.org.
401
603
  - Add PG::Result#each_row for iterative over result sets by row. Thanks to
402
604
  Aaron Patterson for the patch.
403
605
  - 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.
@@ -170,12 +171,31 @@ The following type maps are prefilled with type mappings from the PG::BasicTypeR
170
171
  To report bugs, suggest features, or check out the source with Git,
171
172
  {check out the project page}[https://github.com/ged/ruby-pg].
172
173
 
173
- After checking out the source, run:
174
+ After checking out the source, install all dependencies:
175
+
176
+ $ bundle install
177
+
178
+ Cleanup extension files, packaging files, test databases:
179
+
180
+ $ rake clean
181
+
182
+ Compile extension:
183
+
184
+ $ rake compile
185
+
186
+ Run tests/specs with PostgreSQL tools like `initdb` in the path:
187
+
188
+ $ PATH=$PATH:/usr/lib/postgresql/14/bin rake test
189
+
190
+ Or run a specific test with the line number:
191
+
192
+ $ PATH=$PATH:/usr/lib/postgresql/14/bin rspec -Ilib -fd spec/pg/connection_spec.rb:455
193
+
194
+ Generate the API documentation:
174
195
 
175
- $ rake newb
196
+ $ rake docs
176
197
 
177
- This task will install any missing dependencies, run the tests/specs, and
178
- generate the API documentation.
198
+ Make sure, that all bugs and new features are verified by tests.
179
199
 
180
200
  The current maintainers are Michael Granger <ged@FaerieMUD.org> and
181
201
  Lars Kanis <lars@greiz-reinsdorf.de>.
@@ -183,7 +203,7 @@ Lars Kanis <lars@greiz-reinsdorf.de>.
183
203
 
184
204
  == Copying
185
205
 
186
- Copyright (c) 1997-2019 by the authors.
206
+ Copyright (c) 1997-2022 by the authors.
187
207
 
188
208
  * Jeff Davis <ruby-pg@j-davis.com>
189
209
  * Guy Decoux (ts) <decoux@moulon.inra.fr>
data/Rakefile CHANGED
@@ -3,20 +3,11 @@
3
3
  require 'rbconfig'
4
4
  require 'pathname'
5
5
  require 'tmpdir'
6
-
7
- begin
8
- require 'rake/extensiontask'
9
- rescue LoadError
10
- abort "This Rakefile requires rake-compiler (gem install rake-compiler)"
11
- end
12
-
13
- begin
14
- require 'hoe'
15
- rescue LoadError
16
- abort "This Rakefile requires hoe (gem install hoe)"
17
- end
18
-
6
+ require 'rake/extensiontask'
19
7
  require 'rake/clean'
8
+ require 'rspec/core/rake_task'
9
+ require 'bundler'
10
+ require 'bundler/gem_helper'
20
11
 
21
12
  # Build directory constants
22
13
  BASEDIR = Pathname( __FILE__ ).dirname
@@ -25,82 +16,23 @@ LIBDIR = BASEDIR + 'lib'
25
16
  EXTDIR = BASEDIR + 'ext'
26
17
  PKGDIR = BASEDIR + 'pkg'
27
18
  TMPDIR = BASEDIR + 'tmp'
19
+ TESTDIR = BASEDIR + "tmp_test_*"
28
20
 
29
21
  DLEXT = RbConfig::CONFIG['DLEXT']
30
22
  EXT = LIBDIR + "pg_ext.#{DLEXT}"
31
23
 
32
24
  GEMSPEC = 'pg.gemspec'
33
25
 
34
- TEST_DIRECTORY = BASEDIR + "tmp_test_specs"
35
-
36
- CLOBBER.include( TEST_DIRECTORY.to_s )
26
+ CLEAN.include( TESTDIR.to_s )
37
27
  CLEAN.include( PKGDIR.to_s, TMPDIR.to_s )
38
28
  CLEAN.include "lib/*/libpq.dll"
39
29
  CLEAN.include "lib/pg_ext.*"
40
-
41
- # Set up Hoe plugins
42
- Hoe.plugin :mercurial
43
- Hoe.plugin :signing
44
- Hoe.plugin :deveiate
45
- Hoe.plugin :bundler
46
-
47
- Hoe.plugins.delete :rubyforge
48
- Hoe.plugins.delete :compiler
30
+ CLEAN.include "lib/pg/postgresql_lib_path.rb"
49
31
 
50
32
  load 'Rakefile.cross'
51
33
 
52
-
53
- # 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
@@ -7,6 +7,7 @@ require 'rake/clean'
7
7
  require 'rake/extensiontask'
8
8
  require 'rake/extensioncompiler'
9
9
  require 'ostruct'
10
+ require_relative 'rakelib/task_extension'
10
11
 
11
12
  MISCDIR = BASEDIR + 'misc'
12
13
 
@@ -20,6 +21,7 @@ end
20
21
 
21
22
  class CrossLibrary < OpenStruct
22
23
  include Rake::DSL
24
+ prepend TaskExtension
23
25
 
24
26
  def initialize(for_platform, openssl_config, toolchain)
25
27
  super()
@@ -29,8 +31,8 @@ class CrossLibrary < OpenStruct
29
31
  self.host_platform = toolchain
30
32
 
31
33
  # Cross-compilation constants
32
- self.openssl_version = ENV['OPENSSL_VERSION'] || '1.1.1d'
33
- self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '12.1'
34
+ self.openssl_version = ENV['OPENSSL_VERSION'] || '1.1.1q'
35
+ self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '14.5'
34
36
 
35
37
  # Check if symlinks work in the current working directory.
36
38
  # This fails, if rake-compiler-dock is running on a Windows box.
@@ -250,6 +252,7 @@ class CrossLibrary < OpenStruct
250
252
  end
251
253
 
252
254
  CrossLibraries = [
255
+ ['x64-mingw-ucrt', 'mingw64', 'x86_64-w64-mingw32'],
253
256
  ['x86-mingw32', 'mingw', 'i686-w64-mingw32'],
254
257
  ['x64-mingw32', 'mingw64', 'x86_64-w64-mingw32'],
255
258
  ].map do |platform, openssl_config, toolchain|
@@ -272,7 +275,7 @@ task 'gem:windows:prepare' do
272
275
  require 'io/console'
273
276
  require 'rake_compiler_dock'
274
277
 
275
- # Copy gem signing key and certs to be accessable from the docker container
278
+ # Copy gem signing key and certs to be accessible from the docker container
276
279
  mkdir_p 'build/gem'
277
280
  sh "cp ~/.gem/gem-*.pem build/gem/ || true"
278
281
  sh "bundle package"
@@ -287,11 +290,11 @@ end
287
290
  CrossLibraries.each do |xlib|
288
291
  platform = xlib.for_platform
289
292
  desc "Build fat binary gem for platform #{platform}"
290
- task "gem:windows:#{platform}" => ['ChangeLog', 'gem:windows:prepare', xlib.openssl_tarball, xlib.postgresql_tarball] do
293
+ task "gem:windows:#{platform}" => ['gem:windows:prepare', xlib.openssl_tarball, xlib.postgresql_tarball] do
291
294
  RakeCompilerDock.sh <<-EOT, platform: platform
292
295
  (cp build/gem/gem-*.pem ~/.gem/ || true) &&
293
296
  bundle install --local &&
294
- rake native:#{platform} pkg/#{$hoespec.spec.full_name}-#{platform}.gem MAKE="make -j`nproc`"
297
+ 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
298
  EOT
296
299
  end
297
300
  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-----