pg 1.3.0.rc1-x86-mingw32 → 1.3.0-x86-mingw32
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/binary-gems.yml +15 -9
- data/.github/workflows/source-gem.yml +9 -8
- data/Gemfile +1 -1
- data/History.rdoc +10 -5
- data/Rakefile.cross +2 -1
- data/certs/ged.pem +12 -12
- data/ext/extconf.rb +1 -0
- data/ext/pg.c +24 -3
- data/ext/pg_connection.c +213 -288
- data/ext/pg_record_coder.c +1 -1
- data/lib/2.5/pg_ext.so +0 -0
- data/lib/2.6/pg_ext.so +0 -0
- data/lib/2.7/pg_ext.so +0 -0
- data/lib/3.0/pg_ext.so +0 -0
- data/lib/3.1/pg_ext.so +0 -0
- data/lib/pg/basic_type_registry.rb +1 -1
- data/lib/pg/connection.rb +245 -29
- data/lib/pg/version.rb +1 -1
- data/lib/pg.rb +2 -2
- data/lib/x86-mingw32/libpq.dll +0 -0
- data.tar.gz.sig +0 -0
- metadata +32 -25
- metadata.gz.sig +0 -0
data/ext/pg_record_coder.c
CHANGED
@@ -134,7 +134,7 @@ pg_recordcoder_type_map_get(VALUE self)
|
|
134
134
|
* tm = PG::TypeMapByColumn.new([PG::TextEncoder::Float.new]*2)
|
135
135
|
* # Use this type map to encode the record:
|
136
136
|
* PG::TextEncoder::Record.new(type_map: tm).encode([1,2])
|
137
|
-
* # => "(\"1.
|
137
|
+
* # => "(\"1.0\",\"2.0\")"
|
138
138
|
*
|
139
139
|
* Records can also be encoded and decoded directly to and from the database.
|
140
140
|
* This avoids intermediate string allocations and is very fast.
|
data/lib/2.5/pg_ext.so
CHANGED
Binary file
|
data/lib/2.6/pg_ext.so
CHANGED
Binary file
|
data/lib/2.7/pg_ext.so
CHANGED
Binary file
|
data/lib/3.0/pg_ext.so
CHANGED
Binary file
|
data/lib/3.1/pg_ext.so
ADDED
Binary file
|
data/lib/pg/connection.rb
CHANGED
@@ -7,7 +7,7 @@ require 'io/wait'
|
|
7
7
|
require 'socket'
|
8
8
|
|
9
9
|
# The PostgreSQL connection class. The interface for this class is based on
|
10
|
-
# {libpq}[http://www.postgresql.org/docs/
|
10
|
+
# {libpq}[http://www.postgresql.org/docs/current/libpq.html], the C
|
11
11
|
# application programmer's interface to PostgreSQL. Some familiarity with libpq
|
12
12
|
# is recommended, but not necessary.
|
13
13
|
#
|
@@ -21,6 +21,13 @@ require 'socket'
|
|
21
21
|
#
|
22
22
|
# See the PG::Result class for information on working with the results of a query.
|
23
23
|
#
|
24
|
+
# Many methods of this class have three variants kind of:
|
25
|
+
# 1. #exec - the base method which is an alias to #async_exec .
|
26
|
+
# This is the method that should be used in general.
|
27
|
+
# 2. #async_exec - the async aware version of the method, implemented by libpq's async API.
|
28
|
+
# 3. #sync_exec - the method version that is implemented by blocking function(s) of libpq.
|
29
|
+
#
|
30
|
+
# Sync and async version of the method can be switched by Connection.async_api= , however it is not recommended to change the default.
|
24
31
|
class PG::Connection
|
25
32
|
|
26
33
|
# The order the options are passed to the ::connect method.
|
@@ -364,14 +371,44 @@ class PG::Connection
|
|
364
371
|
end
|
365
372
|
end
|
366
373
|
|
367
|
-
|
368
|
-
|
374
|
+
# call-seq:
|
375
|
+
# conn.get_result() -> PG::Result
|
376
|
+
# conn.get_result() {|pg_result| block }
|
377
|
+
#
|
378
|
+
# Blocks waiting for the next result from a call to
|
379
|
+
# #send_query (or another asynchronous command), and returns
|
380
|
+
# it. Returns +nil+ if no more results are available.
|
381
|
+
#
|
382
|
+
# Note: call this function repeatedly until it returns +nil+, or else
|
383
|
+
# you will not be able to issue further commands.
|
384
|
+
#
|
385
|
+
# If the optional code block is given, it will be passed <i>result</i> as an argument,
|
386
|
+
# and the PG::Result object will automatically be cleared when the block terminates.
|
387
|
+
# In this instance, <code>conn.exec</code> returns the value of the block.
|
388
|
+
def get_result(*args)
|
369
389
|
block
|
370
390
|
sync_get_result
|
371
391
|
end
|
392
|
+
alias async_get_result get_result
|
372
393
|
|
373
|
-
|
374
|
-
|
394
|
+
# call-seq:
|
395
|
+
# conn.get_copy_data( [ nonblock = false [, decoder = nil ]] ) -> Object
|
396
|
+
#
|
397
|
+
# Return one row of data, +nil+
|
398
|
+
# if the copy is done, or +false+ if the call would
|
399
|
+
# block (only possible if _nonblock_ is true).
|
400
|
+
#
|
401
|
+
# If _decoder_ is not set or +nil+, data is returned as binary string.
|
402
|
+
#
|
403
|
+
# If _decoder_ is set to a PG::Coder derivation, the return type depends on this decoder.
|
404
|
+
# PG::TextDecoder::CopyRow decodes the received data fields from one row of PostgreSQL's
|
405
|
+
# COPY text format to an Array of Strings.
|
406
|
+
# Optionally the decoder can type cast the single fields to various Ruby types in one step,
|
407
|
+
# if PG::TextDecoder::CopyRow#type_map is set accordingly.
|
408
|
+
#
|
409
|
+
# See also #copy_data.
|
410
|
+
#
|
411
|
+
def get_copy_data(async=false, decoder=nil)
|
375
412
|
if async
|
376
413
|
return sync_get_copy_data(async, decoder)
|
377
414
|
else
|
@@ -382,56 +419,143 @@ class PG::Connection
|
|
382
419
|
return res
|
383
420
|
end
|
384
421
|
end
|
422
|
+
alias async_get_copy_data get_copy_data
|
385
423
|
|
386
|
-
# In async_api=false mode all send calls run directly on libpq.
|
387
|
-
# Blocking vs. nonblocking state can be changed in libpq.
|
388
|
-
alias sync_setnonblocking setnonblocking
|
389
424
|
|
390
425
|
# In async_api=true mode (default) all send calls run nonblocking.
|
391
426
|
# The difference is that setnonblocking(true) disables automatic handling of would-block cases.
|
392
|
-
|
427
|
+
# In async_api=false mode all send calls run directly on libpq.
|
428
|
+
# Blocking vs. nonblocking state can be changed in libpq.
|
429
|
+
|
430
|
+
# call-seq:
|
431
|
+
# conn.setnonblocking(Boolean) -> nil
|
432
|
+
#
|
433
|
+
# Sets the nonblocking status of the connection.
|
434
|
+
# In the blocking state, calls to #send_query
|
435
|
+
# will block until the message is sent to the server,
|
436
|
+
# but will not wait for the query results.
|
437
|
+
# In the nonblocking state, calls to #send_query
|
438
|
+
# will return an error if the socket is not ready for
|
439
|
+
# writing.
|
440
|
+
# Note: This function does not affect #exec, because
|
441
|
+
# that function doesn't return until the server has
|
442
|
+
# processed the query and returned the results.
|
443
|
+
#
|
444
|
+
# Returns +nil+.
|
445
|
+
def setnonblocking(enabled)
|
393
446
|
singleton_class.async_send_api = !enabled
|
394
447
|
self.flush_data = !enabled
|
395
448
|
sync_setnonblocking(true)
|
396
449
|
end
|
450
|
+
alias async_setnonblocking setnonblocking
|
397
451
|
|
398
452
|
# sync/async isnonblocking methods are switched by async_setnonblocking()
|
399
|
-
|
400
|
-
|
453
|
+
|
454
|
+
# call-seq:
|
455
|
+
# conn.isnonblocking() -> Boolean
|
456
|
+
#
|
457
|
+
# Returns the blocking status of the database connection.
|
458
|
+
# Returns +true+ if the connection is set to nonblocking mode and +false+ if blocking.
|
459
|
+
def isnonblocking
|
401
460
|
false
|
402
461
|
end
|
462
|
+
alias async_isnonblocking isnonblocking
|
463
|
+
alias nonblocking? isnonblocking
|
403
464
|
|
404
|
-
|
405
|
-
|
465
|
+
# call-seq:
|
466
|
+
# conn.put_copy_data( buffer [, encoder] ) -> Boolean
|
467
|
+
#
|
468
|
+
# Transmits _buffer_ as copy data to the server.
|
469
|
+
# Returns true if the data was sent, false if it was
|
470
|
+
# not sent (false is only possible if the connection
|
471
|
+
# is in nonblocking mode, and this command would block).
|
472
|
+
#
|
473
|
+
# _encoder_ can be a PG::Coder derivation (typically PG::TextEncoder::CopyRow).
|
474
|
+
# This encodes the data fields given as _buffer_ from an Array of Strings to
|
475
|
+
# PostgreSQL's COPY text format inclusive proper escaping. Optionally
|
476
|
+
# the encoder can type cast the fields from various Ruby types in one step,
|
477
|
+
# if PG::TextEncoder::CopyRow#type_map is set accordingly.
|
478
|
+
#
|
479
|
+
# Raises an exception if an error occurs.
|
480
|
+
#
|
481
|
+
# See also #copy_data.
|
482
|
+
#
|
483
|
+
def put_copy_data(buffer, encoder=nil)
|
406
484
|
until sync_put_copy_data(buffer, encoder)
|
407
485
|
flush
|
408
486
|
end
|
409
487
|
flush
|
410
488
|
end
|
411
|
-
alias
|
412
|
-
|
489
|
+
alias async_put_copy_data put_copy_data
|
490
|
+
|
491
|
+
# call-seq:
|
492
|
+
# conn.put_copy_end( [ error_message ] ) -> Boolean
|
493
|
+
#
|
494
|
+
# Sends end-of-data indication to the server.
|
495
|
+
#
|
496
|
+
# _error_message_ is an optional parameter, and if set,
|
497
|
+
# forces the COPY command to fail with the string
|
498
|
+
# _error_message_.
|
499
|
+
#
|
500
|
+
# Returns true if the end-of-data was sent, #false* if it was
|
501
|
+
# not sent (*false* is only possible if the connection
|
502
|
+
# is in nonblocking mode, and this command would block).
|
503
|
+
def put_copy_end(*args)
|
413
504
|
until sync_put_copy_end(*args)
|
414
505
|
flush
|
415
506
|
end
|
416
507
|
flush
|
417
508
|
end
|
509
|
+
alias async_put_copy_end put_copy_end
|
418
510
|
|
419
|
-
if method_defined? :
|
420
|
-
|
421
|
-
|
511
|
+
if method_defined? :sync_encrypt_password
|
512
|
+
# call-seq:
|
513
|
+
# conn.encrypt_password( password, username, algorithm=nil ) -> String
|
514
|
+
#
|
515
|
+
# This function is intended to be used by client applications that wish to send commands like <tt>ALTER USER joe PASSWORD 'pwd'</tt>.
|
516
|
+
# It is good practice not to send the original cleartext password in such a command, because it might be exposed in command logs, activity displays, and so on.
|
517
|
+
# Instead, use this function to convert the password to encrypted form before it is sent.
|
518
|
+
#
|
519
|
+
# The +password+ and +username+ arguments are the cleartext password, and the SQL name of the user it is for.
|
520
|
+
# +algorithm+ specifies the encryption algorithm to use to encrypt the password.
|
521
|
+
# Currently supported algorithms are +md5+ and +scram-sha-256+ (+on+ and +off+ are also accepted as aliases for +md5+, for compatibility with older server versions).
|
522
|
+
# Note that support for +scram-sha-256+ was introduced in PostgreSQL version 10, and will not work correctly with older server versions.
|
523
|
+
# If algorithm is omitted or +nil+, this function will query the server for the current value of the +password_encryption+ setting.
|
524
|
+
# That can block, and will fail if the current transaction is aborted, or if the connection is busy executing another query.
|
525
|
+
# If you wish to use the default algorithm for the server but want to avoid blocking, query +password_encryption+ yourself before calling #encrypt_password, and pass that value as the algorithm.
|
526
|
+
#
|
527
|
+
# Return value is the encrypted password.
|
528
|
+
# The caller can assume the string doesn't contain any special characters that would require escaping.
|
529
|
+
#
|
530
|
+
# Available since PostgreSQL-10.
|
531
|
+
# See also corresponding {libpq function}[https://www.postgresql.org/docs/current/libpq-misc.html#LIBPQ-PQENCRYPTPASSWORDCONN].
|
532
|
+
def encrypt_password( password, username, algorithm=nil )
|
422
533
|
algorithm ||= exec("SHOW password_encryption").getvalue(0,0)
|
423
534
|
sync_encrypt_password(password, username, algorithm)
|
424
535
|
end
|
536
|
+
alias async_encrypt_password encrypt_password
|
425
537
|
end
|
426
538
|
|
427
|
-
|
428
|
-
|
539
|
+
# call-seq:
|
540
|
+
# conn.reset()
|
541
|
+
#
|
542
|
+
# Resets the backend connection. This method closes the
|
543
|
+
# backend connection and tries to re-connect.
|
544
|
+
def reset
|
429
545
|
reset_start
|
430
546
|
async_connect_or_reset(:reset_poll)
|
431
547
|
end
|
548
|
+
alias async_reset reset
|
432
549
|
|
433
|
-
|
434
|
-
|
550
|
+
# call-seq:
|
551
|
+
# conn.cancel() -> String
|
552
|
+
#
|
553
|
+
# Requests cancellation of the command currently being
|
554
|
+
# processed.
|
555
|
+
#
|
556
|
+
# Returns +nil+ on success, or a string containing the
|
557
|
+
# error message if a failure occurs.
|
558
|
+
def cancel
|
435
559
|
be_pid = backend_pid
|
436
560
|
be_key = backend_key
|
437
561
|
cancel_request = [0x10, 1234, 5678, be_pid, be_key].pack("NnnNN")
|
@@ -484,6 +608,7 @@ class PG::Connection
|
|
484
608
|
rescue SystemCallError => err
|
485
609
|
err.to_s
|
486
610
|
end
|
611
|
+
alias async_cancel cancel
|
487
612
|
|
488
613
|
private def async_connect_or_reset(poll_meth)
|
489
614
|
# Now grab a reference to the underlying socket so we know when the connection is established
|
@@ -520,19 +645,90 @@ class PG::Connection
|
|
520
645
|
end
|
521
646
|
|
522
647
|
class << self
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
648
|
+
# call-seq:
|
649
|
+
# PG::Connection.new -> conn
|
650
|
+
# PG::Connection.new(connection_hash) -> conn
|
651
|
+
# PG::Connection.new(connection_string) -> conn
|
652
|
+
# PG::Connection.new(host, port, options, tty, dbname, user, password) -> conn
|
653
|
+
#
|
654
|
+
# Create a connection to the specified server.
|
655
|
+
#
|
656
|
+
# +connection_hash+ must be a ruby Hash with connection parameters.
|
657
|
+
# See the {list of valid parameters}[https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS] in the PostgreSQL documentation.
|
658
|
+
#
|
659
|
+
# There are two accepted formats for +connection_string+: plain <code>keyword = value</code> strings and URIs.
|
660
|
+
# See the documentation of {connection strings}[https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING].
|
661
|
+
#
|
662
|
+
# The positional parameter form has the same functionality except that the missing parameters will always take on default values. The parameters are:
|
663
|
+
# [+host+]
|
664
|
+
# server hostname
|
665
|
+
# [+port+]
|
666
|
+
# server port number
|
667
|
+
# [+options+]
|
668
|
+
# backend options
|
669
|
+
# [+tty+]
|
670
|
+
# (ignored in all versions of PostgreSQL)
|
671
|
+
# [+dbname+]
|
672
|
+
# connecting database name
|
673
|
+
# [+user+]
|
674
|
+
# login user name
|
675
|
+
# [+password+]
|
676
|
+
# login password
|
677
|
+
#
|
678
|
+
# Examples:
|
679
|
+
#
|
680
|
+
# # Connect using all defaults
|
681
|
+
# PG::Connection.new
|
682
|
+
#
|
683
|
+
# # As a Hash
|
684
|
+
# PG::Connection.new( dbname: 'test', port: 5432 )
|
685
|
+
#
|
686
|
+
# # As a String
|
687
|
+
# PG::Connection.new( "dbname=test port=5432" )
|
688
|
+
#
|
689
|
+
# # As an Array
|
690
|
+
# PG::Connection.new( nil, 5432, nil, nil, 'test', nil, nil )
|
691
|
+
#
|
692
|
+
# # As an URI
|
693
|
+
# PG::Connection.new( "postgresql://user:pass@pgsql.example.com:5432/testdb?sslmode=require" )
|
694
|
+
#
|
695
|
+
# If the Ruby default internal encoding is set (i.e., <code>Encoding.default_internal != nil</code>), the
|
696
|
+
# connection will have its +client_encoding+ set accordingly.
|
697
|
+
#
|
698
|
+
# Raises a PG::Error if the connection fails.
|
699
|
+
def new(*args, **kwargs)
|
700
|
+
conn = self.connect_start(*args, **kwargs ) or
|
527
701
|
raise(PG::Error, "Unable to create a new connection")
|
528
702
|
|
529
703
|
raise(PG::ConnectionBad, conn.error_message) if conn.status == PG::CONNECTION_BAD
|
530
704
|
|
531
705
|
conn.send(:async_connect_or_reset, :connect_poll)
|
532
706
|
end
|
707
|
+
alias async_connect new
|
708
|
+
alias connect new
|
709
|
+
alias open new
|
710
|
+
alias setdb new
|
711
|
+
alias setdblogin new
|
533
712
|
|
534
|
-
|
535
|
-
|
713
|
+
# call-seq:
|
714
|
+
# PG::Connection.ping(connection_hash) -> Integer
|
715
|
+
# PG::Connection.ping(connection_string) -> Integer
|
716
|
+
# PG::Connection.ping(host, port, options, tty, dbname, login, password) -> Integer
|
717
|
+
#
|
718
|
+
# Check server status.
|
719
|
+
#
|
720
|
+
# See PG::Connection.new for a description of the parameters.
|
721
|
+
#
|
722
|
+
# Returns one of:
|
723
|
+
# [+PQPING_OK+]
|
724
|
+
# server is accepting connections
|
725
|
+
# [+PQPING_REJECT+]
|
726
|
+
# server is alive but rejecting connections
|
727
|
+
# [+PQPING_NO_RESPONSE+]
|
728
|
+
# could not establish connection
|
729
|
+
# [+PQPING_NO_ATTEMPT+]
|
730
|
+
# connection not attempted (bad params)
|
731
|
+
def ping(*args)
|
536
732
|
if Fiber.respond_to?(:scheduler) && Fiber.scheduler
|
537
733
|
# Run PQping in a second thread to avoid blocking of the scheduler.
|
538
734
|
# Unfortunately there's no nonblocking way to run ping.
|
@@ -541,9 +737,14 @@ class PG::Connection
|
|
541
737
|
sync_ping(*args)
|
542
738
|
end
|
543
739
|
end
|
740
|
+
alias async_ping ping
|
544
741
|
|
545
742
|
REDIRECT_CLASS_METHODS = {
|
546
743
|
:new => [:async_connect, :sync_connect],
|
744
|
+
:connect => [:async_connect, :sync_connect],
|
745
|
+
:open => [:async_connect, :sync_connect],
|
746
|
+
:setdb => [:async_connect, :sync_connect],
|
747
|
+
:setdblogin => [:async_connect, :sync_connect],
|
547
748
|
:ping => [:async_ping, :sync_ping],
|
548
749
|
}
|
549
750
|
|
@@ -586,6 +787,22 @@ class PG::Connection
|
|
586
787
|
end
|
587
788
|
end
|
588
789
|
|
790
|
+
# Switch between sync and async libpq API.
|
791
|
+
#
|
792
|
+
# PG::Connection.async_api = true
|
793
|
+
# this is the default.
|
794
|
+
# It sets an alias from #exec to #async_exec, #reset to #async_reset and so on.
|
795
|
+
#
|
796
|
+
# PG::Connection.async_api = false
|
797
|
+
# sets an alias from #exec to #sync_exec, #reset to #sync_reset and so on.
|
798
|
+
#
|
799
|
+
# pg-1.1.0+ defaults to libpq's async API for query related blocking methods.
|
800
|
+
# pg-1.3.0+ defaults to libpq's async API for all possibly blocking methods.
|
801
|
+
#
|
802
|
+
# _PLEASE_ _NOTE_: This method is not part of the public API and is for debug and development use only.
|
803
|
+
# Do not use this method in production code.
|
804
|
+
# Any issues with the default setting of <tt>async_api=true</tt> should be reported to the maintainers instead.
|
805
|
+
#
|
589
806
|
def async_api=(enable)
|
590
807
|
self.async_send_api = enable
|
591
808
|
REDIRECT_METHODS.each do |ali, (async, sync)|
|
@@ -599,6 +816,5 @@ class PG::Connection
|
|
599
816
|
end
|
600
817
|
end
|
601
818
|
|
602
|
-
# pg-1.1.0+ defaults to libpq's async API for query related blocking methods
|
603
819
|
self.async_api = true
|
604
820
|
end # class PG::Connection
|
data/lib/pg/version.rb
CHANGED
data/lib/pg.rb
CHANGED
data/lib/x86-mingw32/libpq.dll
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,34 +1,40 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.0
|
4
|
+
version: 1.3.0
|
5
5
|
platform: x86-mingw32
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
8
8
|
- Lars Kanis
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain:
|
12
12
|
- |
|
13
13
|
-----BEGIN CERTIFICATE-----
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
14
|
+
MIID+DCCAmCgAwIBAgIBBDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdnZWQv
|
15
|
+
REM9RmFlcmllTVVEL0RDPW9yZzAeFw0yMjAxMDcyMzU4MTRaFw0yMzAxMDcyMzU4
|
16
|
+
MTRaMCIxIDAeBgNVBAMMF2dlZC9EQz1GYWVyaWVNVUQvREM9b3JnMIIBojANBgkq
|
17
|
+
hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvyVhkRzvlEs0fe7145BYLfN6njX9ih5H
|
18
|
+
L60U0p0euIurpv84op9CNKF9tx+1WKwyQvQP7qFGuZxkSUuWcP/sFhDXL1lWUuIl
|
19
|
+
M4uHbGCRmOshDrF4dgnBeOvkHr1fIhPlJm5FO+Vew8tSQmlDsosxLUx+VB7DrVFO
|
20
|
+
5PU2AEbf04GGSrmqADGWXeaslaoRdb1fu/0M5qfPTRn5V39sWD9umuDAF9qqil/x
|
21
|
+
Sl6phTvgBrG8GExHbNZpLARd3xrBYLEFsX7RvBn2UPfgsrtvpdXjsHGfpT3IPN+B
|
22
|
+
vQ66lts4alKC69TE5cuKasWBm+16A4aEe3XdZBRNmtOu/g81gvwA7fkJHKllJuaI
|
23
|
+
dXzdHqq+zbGZVSQ7pRYHYomD0IiDe1DbIouFnPWmagaBnGHwXkDT2bKKP+s2v21m
|
24
|
+
ozilJg4aar2okb/RA6VS87o+d7g6LpDDMMQjH4G9OPnJENLdhu8KnPw/ivSVvQw7
|
25
|
+
N2I4L/ZOIe2DIVuYH7aLHfjZDQv/mNgpAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYD
|
26
|
+
VR0PBAQDAgSwMB0GA1UdDgQWBBRyjf55EbrHagiRLqt5YAd3yb8k4DANBgkqhkiG
|
27
|
+
9w0BAQsFAAOCAYEASrm1AbEoxACZ9WXJH3R5axV3U0CA4xaETlL2YT+2nOfVBMQ9
|
28
|
+
0ZlkPx6j4ghKJgAIi1TMfDM2JyPJsppQh8tiNccDjWc62UZRY/dq26cMqf/lcI+a
|
29
|
+
6YBuEYvzZfearwVs8tHnXtwYV3WSCoCOQaB+nq2lA1O+nkKNl41WOsVbNama5jx3
|
30
|
+
8cQtVSEEmZy6jIDJ8c5TmBJ7BQUDEUEWA/A3V42Xyctoj7DvUXWE0lP+X6ypAVSr
|
31
|
+
lFh3TS64D7NTvxkmg7natUoCvobl6kGl4yMaqE4YRTlfuzhpf91TSOntClqrAOsS
|
32
|
+
K1s56WndQj3IoBocdY9mQhDZLtLHofSkymoP8btBlj5SsN24TiF0VMSZlctSCYZg
|
33
|
+
GKyHim/MMlIfGOWsgfioq5jzwmql7W4CDubbb8Lkg70v+hN2E/MnNVAcNE3gyaGc
|
34
|
+
P5YP5BAbNW+gvd3QHRiWTTuhgHrdDnGdXg93N2M5KHn1ug8BtPLQwlcFwEpKnlLn
|
35
|
+
btEP+7EplFuoiMfd
|
30
36
|
-----END CERTIFICATE-----
|
31
|
-
date:
|
37
|
+
date: 2022-01-23 00:00:00.000000000 Z
|
32
38
|
dependencies: []
|
33
39
|
description: Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL
|
34
40
|
9.3 and later.
|
@@ -100,6 +106,7 @@ files:
|
|
100
106
|
- lib/2.6/pg_ext.so
|
101
107
|
- lib/2.7/pg_ext.so
|
102
108
|
- lib/3.0/pg_ext.so
|
109
|
+
- lib/3.1/pg_ext.so
|
103
110
|
- lib/pg.rb
|
104
111
|
- lib/pg/basic_type_map_based_on_result.rb
|
105
112
|
- lib/pg/basic_type_map_for_queries.rb
|
@@ -156,7 +163,7 @@ metadata:
|
|
156
163
|
source_code_uri: https://github.com/ged/ruby-pg
|
157
164
|
changelog_uri: https://github.com/ged/ruby-pg/blob/master/History.rdoc
|
158
165
|
documentation_uri: http://deveiate.org/code/pg
|
159
|
-
post_install_message:
|
166
|
+
post_install_message:
|
160
167
|
rdoc_options:
|
161
168
|
- "--main"
|
162
169
|
- README.rdoc
|
@@ -169,15 +176,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
176
|
version: '2.5'
|
170
177
|
- - "<"
|
171
178
|
- !ruby/object:Gem::Version
|
172
|
-
version: 3.
|
179
|
+
version: 3.2.dev
|
173
180
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
181
|
requirements:
|
175
|
-
- - "
|
182
|
+
- - ">="
|
176
183
|
- !ruby/object:Gem::Version
|
177
|
-
version:
|
184
|
+
version: '0'
|
178
185
|
requirements: []
|
179
|
-
rubygems_version: 3.
|
180
|
-
signing_key:
|
186
|
+
rubygems_version: 3.3.4
|
187
|
+
signing_key:
|
181
188
|
specification_version: 4
|
182
189
|
summary: Pg is the Ruby interface to the PostgreSQL RDBMS
|
183
190
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|