pg 1.3.4 → 1.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +19 -0
- data/ext/extconf.rb +31 -0
- data/ext/pg_connection.c +13 -10
- data/ext/pg_record_coder.c +6 -4
- data/ext/pg_result.c +1 -0
- data/lib/pg/basic_type_registry.rb +8 -3
- data/lib/pg/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0bb3782224d0c471417ceaa47d1355d5a06be2590fb3671fde73882346db0c5c
|
4
|
+
data.tar.gz: cd728b238d0b174f02a31c38afbd990177f81eec8516a1c953ee7bade1ddb4c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7b3ad8293281fb830274dc0e3d6e3c59c1dca85ea4f112f0aaf3a7629f61e315747f1e6ecad96e7a9528d42eeb3baafb819b7360d02acfc636ae7cb2d24ef42
|
7
|
+
data.tar.gz: f2476f2c7b1950346adf87c3675b838b9c57c909d6d787b50f4cf418ccb51296a02677faac7910378a665daa087f2aa552375f72ca42ba428e539cf07e80392c
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
== v1.3.5 [2022-03-31] Lars Kanis <lars@greiz-reinsdorf.de>
|
2
|
+
|
3
|
+
Bugfixes:
|
4
|
+
|
5
|
+
- Handle PGRES_COMMAND_OK in pgresult_stream_any. #447
|
6
|
+
Fixes usage when trying to stream the result of a procedure call that returns no results.
|
7
|
+
|
8
|
+
Enhancements:
|
9
|
+
|
10
|
+
- Rename BasicTypeRegistry#define_default_types to #register_default_types to use a more consistent terminology.
|
11
|
+
Keeping define_default_types for compatibility.
|
12
|
+
- BasicTypeRegistry: return self instead of objects by accident.
|
13
|
+
This allows call chaining.
|
14
|
+
- Add some April fun. #449
|
15
|
+
|
16
|
+
Documentation:
|
17
|
+
- Refine documentation of conn.socket_io and conn.connect_poll
|
18
|
+
|
19
|
+
|
1
20
|
== v1.3.4 [2022-03-10] Lars Kanis <lars@greiz-reinsdorf.de>
|
2
21
|
|
3
22
|
Bugfixes:
|
data/ext/extconf.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
1
3
|
require 'pp'
|
2
4
|
require 'mkmf'
|
3
5
|
|
@@ -167,3 +169,32 @@ end
|
|
167
169
|
create_header()
|
168
170
|
create_makefile( "pg_ext" )
|
169
171
|
|
172
|
+
|
173
|
+
def message!(important_message)
|
174
|
+
message important_message
|
175
|
+
if !$stdout.tty? && File.chardev?('/dev/tty')
|
176
|
+
File.open('/dev/tty', 'w') do |tty|
|
177
|
+
tty.print important_message
|
178
|
+
end
|
179
|
+
end
|
180
|
+
rescue
|
181
|
+
end
|
182
|
+
|
183
|
+
if "2022-04-01" == Time.now.strftime("%Y-%m-%d")
|
184
|
+
message! <<-EOM
|
185
|
+
===================================================================
|
186
|
+
HEADS UP! Prepare for pg-1.4.2022 ! 🎉🎉🎉
|
187
|
+
|
188
|
+
Now that psycopg3 has most of the features of ruby-pg, we plan to
|
189
|
+
switch to using it as our foundation for the next pg release.
|
190
|
+
It will run through pycall and requires a working python setup.
|
191
|
+
This will minimize our development and maintenance efforts, since
|
192
|
+
it allows us to use one and the same code base for both programming
|
193
|
+
languages - ruby and python. 👏😃
|
194
|
+
|
195
|
+
And we follow the recent merge of the Django and Rails teams! ❤️
|
196
|
+
|
197
|
+
Stay up-to-date at https://github.com/ged/ruby-pg/issues/449
|
198
|
+
===================================================================
|
199
|
+
EOM
|
200
|
+
end
|
data/ext/pg_connection.c
CHANGED
@@ -450,17 +450,18 @@ pgconn_s_encrypt_password(VALUE self, VALUE password, VALUE username)
|
|
450
450
|
* the asynchronous connection is ready
|
451
451
|
*
|
452
452
|
* Example:
|
453
|
-
*
|
454
|
-
*
|
453
|
+
* require "io/wait"
|
454
|
+
*
|
455
|
+
* conn = PG::Connection.connect_start(dbname: 'mydatabase')
|
455
456
|
* status = conn.connect_poll
|
456
457
|
* while(status != PG::PGRES_POLLING_OK) do
|
457
458
|
* # do some work while waiting for the connection to complete
|
458
459
|
* if(status == PG::PGRES_POLLING_READING)
|
459
|
-
*
|
460
|
+
* unless conn.socket_io.wait_readable(10.0)
|
460
461
|
* raise "Asynchronous connection timed out!"
|
461
462
|
* end
|
462
463
|
* elsif(status == PG::PGRES_POLLING_WRITING)
|
463
|
-
*
|
464
|
+
* unless conn.socket_io.wait_writable(10.0)
|
464
465
|
* raise "Asynchronous connection timed out!"
|
465
466
|
* end
|
466
467
|
* end
|
@@ -818,13 +819,15 @@ pgconn_socket(VALUE self)
|
|
818
819
|
* call-seq:
|
819
820
|
* conn.socket_io() -> IO
|
820
821
|
*
|
821
|
-
* Fetch
|
822
|
-
* This object can be used for IO.select to wait for events while running
|
823
|
-
*
|
822
|
+
* Fetch an IO object created from the Connection's underlying socket.
|
823
|
+
* This object can be used per <tt>socket_io.wait_readable</tt>, <tt>socket_io.wait_writable</tt> or for <tt>IO.select</tt> to wait for events while running asynchronous API calls.
|
824
|
+
* <tt>IO#wait_*able</tt> is is <tt>Fiber.scheduler</tt> compatible in contrast to <tt>IO.select</tt>.
|
825
|
+
*
|
826
|
+
* The IO object can change while the connection is established, but is memorized afterwards.
|
827
|
+
* So be sure not to cache the IO object, but repeat calling <tt>conn.socket_io</tt> instead.
|
824
828
|
*
|
825
|
-
* Using this
|
826
|
-
* being closed by Ruby when an IO created using <tt>IO.for_fd(conn.socket)</tt>
|
827
|
-
* goes out of scope. In contrast to #socket, it also works on Windows.
|
829
|
+
* Using this method also works on Windows in contrast to using #socket .
|
830
|
+
* It also avoids the problem of the underlying connection being closed by Ruby when an IO created using <tt>IO.for_fd(conn.socket)</tt> goes out of scope.
|
828
831
|
*/
|
829
832
|
static VALUE
|
830
833
|
pgconn_socket_io(VALUE self)
|
data/ext/pg_record_coder.c
CHANGED
@@ -344,10 +344,12 @@ record_isspace(char ch)
|
|
344
344
|
* oids = conn.exec( "SELECT (NULL::complex).*" )
|
345
345
|
* # Build a type map (PG::TypeMapByColumn) for decoding the "complex" type
|
346
346
|
* dtm = PG::BasicTypeMapForResults.new(conn).build_column_map( oids )
|
347
|
-
* #
|
348
|
-
* PG::BasicTypeRegistry.
|
349
|
-
* #
|
350
|
-
*
|
347
|
+
* # Build a type map and populate with basic types
|
348
|
+
* btr = PG::BasicTypeRegistry.new.register_default_types
|
349
|
+
* # Register a new record decoder for decoding our type "complex"
|
350
|
+
* btr.register_coder(PG::TextDecoder::Record.new(type_map: dtm, name: "complex"))
|
351
|
+
* # Apply our basic type registry to all results retrieved from the server
|
352
|
+
* conn.type_map_for_results = PG::BasicTypeMapForResults.new(conn, registry: btr)
|
351
353
|
* # Now queries decode the "complex" type (and many basic types) automatically
|
352
354
|
* conn.exec("SELECT * FROM my_table").to_a
|
353
355
|
* # => [{"v1"=>[2.0, 3.0], "v2"=>[4.0, 5.0]}, {"v1"=>[6.0, 7.0], "v2"=>[8.0, 9.0]}]
|
data/ext/pg_result.c
CHANGED
@@ -1457,6 +1457,7 @@ pgresult_stream_any(VALUE self, void (*yielder)(VALUE, int, int, void*), void* d
|
|
1457
1457
|
|
1458
1458
|
switch( PQresultStatus(pgresult) ){
|
1459
1459
|
case PGRES_TUPLES_OK:
|
1460
|
+
case PGRES_COMMAND_OK:
|
1460
1461
|
if( ntuples == 0 )
|
1461
1462
|
return self;
|
1462
1463
|
rb_raise( rb_eInvalidResultStatus, "PG::Result is not in single row mode");
|
@@ -22,7 +22,7 @@ require 'pg' unless defined?( PG )
|
|
22
22
|
# end
|
23
23
|
#
|
24
24
|
# conn = PG.connect
|
25
|
-
# regi = PG::BasicTypeRegistry.new.
|
25
|
+
# regi = PG::BasicTypeRegistry.new.register_default_types
|
26
26
|
# regi.register_type(0, 'inet', InetEncoder, InetDecoder)
|
27
27
|
# conn.type_map_for_results = PG::BasicTypeMapForResults.new(conn, registry: regi)
|
28
28
|
class PG::BasicTypeRegistry
|
@@ -184,6 +184,7 @@ class PG::BasicTypeRegistry
|
|
184
184
|
name = coder.name || raise(ArgumentError, "name of #{coder.inspect} must be defined")
|
185
185
|
h[:encoder][name] = coder if coder.respond_to?(:encode)
|
186
186
|
h[:decoder][name] = coder if coder.respond_to?(:decode)
|
187
|
+
self
|
187
188
|
end
|
188
189
|
|
189
190
|
# Register the given +encoder_class+ and/or +decoder_class+ for casting a PostgreSQL type.
|
@@ -193,6 +194,7 @@ class PG::BasicTypeRegistry
|
|
193
194
|
def register_type(format, name, encoder_class, decoder_class)
|
194
195
|
register_coder(encoder_class.new(name: name, format: format)) if encoder_class
|
195
196
|
register_coder(decoder_class.new(name: name, format: format)) if decoder_class
|
197
|
+
self
|
196
198
|
end
|
197
199
|
|
198
200
|
# Alias the +old+ type to the +new+ type.
|
@@ -205,10 +207,11 @@ class PG::BasicTypeRegistry
|
|
205
207
|
@coders_by_name[format][ende].delete(new)
|
206
208
|
end
|
207
209
|
end
|
210
|
+
self
|
208
211
|
end
|
209
212
|
|
210
213
|
# Populate the registry with all builtin types of ruby-pg
|
211
|
-
def
|
214
|
+
def register_default_types
|
212
215
|
register_type 0, 'int2', PG::TextEncoder::Integer, PG::TextDecoder::Integer
|
213
216
|
alias_type 0, 'int4', 'int2'
|
214
217
|
alias_type 0, 'int8', 'int2'
|
@@ -281,8 +284,10 @@ class PG::BasicTypeRegistry
|
|
281
284
|
self
|
282
285
|
end
|
283
286
|
|
287
|
+
alias define_default_types register_default_types
|
288
|
+
|
284
289
|
# @private
|
285
|
-
DEFAULT_TYPE_REGISTRY = PG::BasicTypeRegistry.new.
|
290
|
+
DEFAULT_TYPE_REGISTRY = PG::BasicTypeRegistry.new.register_default_types
|
286
291
|
|
287
292
|
# Delegate class method calls to DEFAULT_TYPE_REGISTRY
|
288
293
|
class << self
|
data/lib/pg/version.rb
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -36,7 +36,7 @@ cert_chain:
|
|
36
36
|
oL1mUdzB8KrZL4/WbG5YNX6UTtJbIOu9qEFbBAy4/jtIkJX+dlNoFwd4GXQW1YNO
|
37
37
|
nA==
|
38
38
|
-----END CERTIFICATE-----
|
39
|
-
date: 2022-03-
|
39
|
+
date: 2022-03-31 00:00:00.000000000 Z
|
40
40
|
dependencies: []
|
41
41
|
description: Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL
|
42
42
|
9.3 and later.
|
metadata.gz.sig
CHANGED
Binary file
|