pg 0.18.2 → 1.5.3
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data/.appveyor.yml +42 -0
- data/.gems +6 -0
- data/.github/workflows/binary-gems.yml +117 -0
- data/.github/workflows/source-gem.yml +137 -0
- data/.gitignore +22 -0
- data/.hgsigs +34 -0
- data/.hgtags +41 -0
- data/.irbrc +23 -0
- data/.pryrc +23 -0
- data/.tm_properties +21 -0
- data/.travis.yml +49 -0
- data/BSDL +2 -2
- data/Gemfile +14 -0
- data/History.md +876 -0
- data/Manifest.txt +8 -21
- data/README-Windows.rdoc +17 -28
- data/README.ja.md +276 -0
- data/README.md +286 -0
- data/Rakefile +40 -131
- data/Rakefile.cross +88 -70
- data/certs/ged.pem +24 -0
- data/certs/larskanis-2022.pem +26 -0
- data/certs/larskanis-2023.pem +24 -0
- data/ext/errorcodes.def +113 -0
- data/ext/errorcodes.rb +1 -1
- data/ext/errorcodes.txt +36 -2
- data/ext/extconf.rb +120 -54
- data/ext/gvl_wrappers.c +8 -0
- data/ext/gvl_wrappers.h +44 -33
- data/ext/pg.c +226 -200
- data/ext/pg.h +99 -99
- data/ext/pg_binary_decoder.c +164 -16
- data/ext/pg_binary_encoder.c +249 -22
- data/ext/pg_coder.c +189 -44
- data/ext/pg_connection.c +1866 -1173
- data/ext/pg_copy_coder.c +398 -42
- data/ext/pg_errors.c +1 -1
- data/ext/pg_record_coder.c +522 -0
- data/ext/pg_result.c +727 -232
- data/ext/pg_text_decoder.c +629 -43
- data/ext/pg_text_encoder.c +269 -102
- data/ext/pg_tuple.c +572 -0
- data/ext/pg_type_map.c +64 -23
- data/ext/pg_type_map_all_strings.c +21 -7
- data/ext/pg_type_map_by_class.c +59 -27
- data/ext/pg_type_map_by_column.c +86 -43
- data/ext/pg_type_map_by_mri_type.c +49 -20
- data/ext/pg_type_map_by_oid.c +62 -29
- data/ext/pg_type_map_in_ruby.c +56 -22
- data/ext/{util.c → pg_util.c} +12 -12
- data/ext/{util.h → pg_util.h} +2 -2
- data/lib/pg/basic_type_map_based_on_result.rb +67 -0
- data/lib/pg/basic_type_map_for_queries.rb +198 -0
- data/lib/pg/basic_type_map_for_results.rb +104 -0
- data/lib/pg/basic_type_registry.rb +299 -0
- data/lib/pg/binary_decoder/date.rb +9 -0
- data/lib/pg/binary_decoder/timestamp.rb +26 -0
- data/lib/pg/binary_encoder/timestamp.rb +20 -0
- data/lib/pg/coder.rb +36 -13
- data/lib/pg/connection.rb +797 -77
- data/lib/pg/exceptions.rb +16 -2
- data/lib/pg/result.rb +24 -7
- data/lib/pg/text_decoder/date.rb +18 -0
- data/lib/pg/text_decoder/inet.rb +9 -0
- data/lib/pg/text_decoder/json.rb +14 -0
- data/lib/pg/text_decoder/numeric.rb +9 -0
- data/lib/pg/text_decoder/timestamp.rb +30 -0
- data/lib/pg/text_encoder/date.rb +12 -0
- data/lib/pg/text_encoder/inet.rb +28 -0
- data/lib/pg/text_encoder/json.rb +14 -0
- data/lib/pg/text_encoder/numeric.rb +9 -0
- data/lib/pg/text_encoder/timestamp.rb +24 -0
- data/lib/pg/tuple.rb +30 -0
- data/lib/pg/type_map_by_column.rb +3 -2
- data/lib/pg/version.rb +4 -0
- data/lib/pg.rb +106 -41
- data/misc/openssl-pg-segfault.rb +31 -0
- data/misc/postgres/History.txt +9 -0
- data/misc/postgres/Manifest.txt +5 -0
- data/misc/postgres/README.txt +21 -0
- data/misc/postgres/Rakefile +21 -0
- data/misc/postgres/lib/postgres.rb +16 -0
- data/misc/ruby-pg/History.txt +9 -0
- data/misc/ruby-pg/Manifest.txt +5 -0
- data/misc/ruby-pg/README.txt +21 -0
- data/misc/ruby-pg/Rakefile +21 -0
- data/misc/ruby-pg/lib/ruby/pg.rb +16 -0
- data/pg.gemspec +34 -0
- data/rakelib/task_extension.rb +46 -0
- data/sample/array_insert.rb +1 -1
- data/sample/async_api.rb +4 -8
- data/sample/async_copyto.rb +1 -1
- data/sample/async_mixed.rb +1 -1
- data/sample/check_conn.rb +1 -1
- data/sample/copydata.rb +71 -0
- data/sample/copyfrom.rb +1 -1
- data/sample/copyto.rb +1 -1
- data/sample/cursor.rb +1 -1
- data/sample/disk_usage_report.rb +6 -15
- data/sample/issue-119.rb +2 -2
- data/sample/losample.rb +1 -1
- data/sample/minimal-testcase.rb +2 -2
- data/sample/notify_wait.rb +1 -1
- data/sample/pg_statistics.rb +6 -15
- data/sample/replication_monitor.rb +9 -18
- data/sample/test_binary_values.rb +1 -1
- data/sample/wal_shipper.rb +2 -2
- data/sample/warehouse_partitions.rb +8 -17
- data/translation/.po4a-version +7 -0
- data/translation/po/all.pot +910 -0
- data/translation/po/ja.po +1047 -0
- data/translation/po4a.cfg +12 -0
- data.tar.gz.sig +0 -0
- metadata +137 -204
- metadata.gz.sig +0 -0
- data/ChangeLog +0 -5545
- data/History.rdoc +0 -313
- data/README.ja.rdoc +0 -14
- data/README.rdoc +0 -161
- data/lib/pg/basic_type_mapping.rb +0 -399
- data/lib/pg/constants.rb +0 -11
- data/lib/pg/text_decoder.rb +0 -42
- data/lib/pg/text_encoder.rb +0 -27
- data/spec/data/expected_trace.out +0 -26
- data/spec/data/random_binary_data +0 -0
- data/spec/helpers.rb +0 -355
- data/spec/pg/basic_type_mapping_spec.rb +0 -251
- data/spec/pg/connection_spec.rb +0 -1535
- data/spec/pg/result_spec.rb +0 -449
- data/spec/pg/type_map_by_class_spec.rb +0 -138
- data/spec/pg/type_map_by_column_spec.rb +0 -222
- data/spec/pg/type_map_by_mri_type_spec.rb +0 -136
- data/spec/pg/type_map_by_oid_spec.rb +0 -149
- data/spec/pg/type_map_in_ruby_spec.rb +0 -164
- data/spec/pg/type_map_spec.rb +0 -22
- data/spec/pg/type_spec.rb +0 -688
- data/spec/pg_spec.rb +0 -50
data/lib/pg/exceptions.rb
CHANGED
|
@@ -1,11 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
require 'pg' unless defined?( PG )
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
module PG
|
|
7
8
|
|
|
8
|
-
class Error < StandardError
|
|
9
|
+
class Error < StandardError
|
|
10
|
+
def initialize(msg=nil, connection: nil, result: nil)
|
|
11
|
+
@connection = connection
|
|
12
|
+
@result = result
|
|
13
|
+
super(msg)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class NotAllCopyDataRetrieved < PG::Error
|
|
18
|
+
end
|
|
19
|
+
class LostCopyState < PG::Error
|
|
20
|
+
end
|
|
21
|
+
class NotInBlockingMode < PG::Error
|
|
22
|
+
end
|
|
9
23
|
|
|
10
24
|
end # module PG
|
|
11
25
|
|
data/lib/pg/result.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
require 'pg' unless defined?( PG )
|
|
4
5
|
|
|
@@ -9,18 +10,34 @@ class PG::Result
|
|
|
9
10
|
#
|
|
10
11
|
# +type_map+: a PG::TypeMap instance.
|
|
11
12
|
#
|
|
12
|
-
#
|
|
13
|
+
# This method is equal to #type_map= , but returns self, so that calls can be chained.
|
|
14
|
+
#
|
|
15
|
+
# See also PG::BasicTypeMapForResults
|
|
13
16
|
def map_types!(type_map)
|
|
14
17
|
self.type_map = type_map
|
|
15
|
-
self
|
|
18
|
+
return self
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Set the data type for all field name returning methods.
|
|
22
|
+
#
|
|
23
|
+
# +type+: a Symbol defining the field name type.
|
|
24
|
+
#
|
|
25
|
+
# This method is equal to #field_name_type= , but returns self, so that calls can be chained.
|
|
26
|
+
def field_names_as(type)
|
|
27
|
+
self.field_name_type = type
|
|
28
|
+
return self
|
|
16
29
|
end
|
|
17
30
|
|
|
31
|
+
### Return a String representation of the object suitable for debugging.
|
|
18
32
|
def inspect
|
|
19
33
|
str = self.to_s
|
|
20
|
-
str[-1,0] =
|
|
21
|
-
|
|
34
|
+
str[-1,0] = if cleared?
|
|
35
|
+
" cleared"
|
|
36
|
+
else
|
|
37
|
+
" status=#{res_status(result_status)} ntuples=#{ntuples} nfields=#{nfields} cmd_tuples=#{cmd_tuples}"
|
|
38
|
+
end
|
|
39
|
+
return str
|
|
22
40
|
end
|
|
41
|
+
|
|
23
42
|
end # class PG::Result
|
|
24
43
|
|
|
25
|
-
# Backward-compatible alias
|
|
26
|
-
PGresult = PG::Result
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'date'
|
|
5
|
+
|
|
6
|
+
module PG
|
|
7
|
+
module TextDecoder
|
|
8
|
+
class Date < SimpleDecoder
|
|
9
|
+
def decode(string, tuple=nil, field=nil)
|
|
10
|
+
if string =~ /\A(\d{4})-(\d\d)-(\d\d)\z/
|
|
11
|
+
::Date.new $1.to_i, $2.to_i, $3.to_i
|
|
12
|
+
else
|
|
13
|
+
string
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end # module PG
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'json'
|
|
5
|
+
|
|
6
|
+
module PG
|
|
7
|
+
module TextDecoder
|
|
8
|
+
class JSON < SimpleDecoder
|
|
9
|
+
def decode(string, tuple=nil, field=nil)
|
|
10
|
+
::JSON.parse(string, quirks_mode: true)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end # module PG
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module PG
|
|
5
|
+
module TextDecoder
|
|
6
|
+
# Convenience classes for timezone options
|
|
7
|
+
class TimestampUtc < Timestamp
|
|
8
|
+
def initialize(hash={}, **kwargs)
|
|
9
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
|
10
|
+
super(**hash, **kwargs, flags: PG::Coder::TIMESTAMP_DB_UTC | PG::Coder::TIMESTAMP_APP_UTC)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
class TimestampUtcToLocal < Timestamp
|
|
14
|
+
def initialize(hash={}, **kwargs)
|
|
15
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
|
16
|
+
super(**hash, **kwargs, flags: PG::Coder::TIMESTAMP_DB_UTC | PG::Coder::TIMESTAMP_APP_LOCAL)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
class TimestampLocal < Timestamp
|
|
20
|
+
def initialize(hash={}, **kwargs)
|
|
21
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
|
22
|
+
super(**hash, **kwargs, flags: PG::Coder::TIMESTAMP_DB_LOCAL | PG::Coder::TIMESTAMP_APP_LOCAL)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# For backward compatibility:
|
|
27
|
+
TimestampWithoutTimeZone = TimestampLocal
|
|
28
|
+
TimestampWithTimeZone = Timestamp
|
|
29
|
+
end
|
|
30
|
+
end # module PG
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'ipaddr'
|
|
5
|
+
|
|
6
|
+
module PG
|
|
7
|
+
module TextEncoder
|
|
8
|
+
class Inet < SimpleEncoder
|
|
9
|
+
def encode(value)
|
|
10
|
+
case value
|
|
11
|
+
when IPAddr
|
|
12
|
+
default_prefix = (value.family == Socket::AF_INET ? 32 : 128)
|
|
13
|
+
s = value.to_s
|
|
14
|
+
if value.respond_to?(:prefix)
|
|
15
|
+
prefix = value.prefix
|
|
16
|
+
else
|
|
17
|
+
range = value.to_range
|
|
18
|
+
prefix = default_prefix - Math.log(((range.end.to_i - range.begin.to_i) + 1), 2).to_i
|
|
19
|
+
end
|
|
20
|
+
s << "/" << prefix.to_s if prefix != default_prefix
|
|
21
|
+
s
|
|
22
|
+
else
|
|
23
|
+
value
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end # module PG
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module PG
|
|
5
|
+
module TextEncoder
|
|
6
|
+
class TimestampWithoutTimeZone < SimpleEncoder
|
|
7
|
+
def encode(value)
|
|
8
|
+
value.respond_to?(:strftime) ? value.strftime("%Y-%m-%d %H:%M:%S.%N") : value
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class TimestampUtc < SimpleEncoder
|
|
13
|
+
def encode(value)
|
|
14
|
+
value.respond_to?(:utc) ? value.utc.strftime("%Y-%m-%d %H:%M:%S.%N") : value
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class TimestampWithTimeZone < SimpleEncoder
|
|
19
|
+
def encode(value)
|
|
20
|
+
value.respond_to?(:strftime) ? value.strftime("%Y-%m-%d %H:%M:%S.%N %:z") : value
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end # module PG
|
data/lib/pg/tuple.rb
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'pg' unless defined?( PG )
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class PG::Tuple
|
|
8
|
+
|
|
9
|
+
### Return a String representation of the object suitable for debugging.
|
|
10
|
+
def inspect
|
|
11
|
+
"#<#{self.class} #{self.map{|k,v| "#{k}: #{v.inspect}" }.join(", ") }>"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def has_key?(key)
|
|
15
|
+
field_map.has_key?(key)
|
|
16
|
+
end
|
|
17
|
+
alias key? has_key?
|
|
18
|
+
|
|
19
|
+
def keys
|
|
20
|
+
field_names || field_map.keys.freeze
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def each_key(&block)
|
|
24
|
+
if fn=field_names
|
|
25
|
+
fn.each(&block)
|
|
26
|
+
else
|
|
27
|
+
field_map.each_key(&block)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
require 'pg' unless defined?( PG )
|
|
4
5
|
|
|
@@ -9,7 +10,7 @@ class PG::TypeMapByColumn
|
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def inspect
|
|
12
|
-
type_strings = coders.map{|c| c ?
|
|
13
|
+
type_strings = coders.map{|c| c ? c.inspect_short : 'nil' }
|
|
13
14
|
"#<#{self.class} #{type_strings.join(' ')}>"
|
|
14
15
|
end
|
|
15
16
|
end
|
data/lib/pg/version.rb
ADDED
data/lib/pg.rb
CHANGED
|
@@ -1,64 +1,129 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
begin
|
|
4
|
-
require 'pg_ext'
|
|
5
|
-
rescue LoadError
|
|
6
|
-
# If it's a Windows binary gem, try the <major>.<minor> subdirectory
|
|
7
|
-
if RUBY_PLATFORM =~/(mswin|mingw)/i
|
|
8
|
-
major_minor = RUBY_VERSION[ /^(\d+\.\d+)/ ] or
|
|
9
|
-
raise "Oops, can't extract the major/minor version from #{RUBY_VERSION.dump}"
|
|
10
|
-
|
|
11
|
-
# Set the PATH environment variable, so that libpq.dll can be found.
|
|
12
|
-
old_path = ENV['PATH']
|
|
13
|
-
ENV['PATH'] = "#{File.expand_path("../#{RUBY_PLATFORM}", __FILE__)};#{old_path}"
|
|
14
|
-
require "#{major_minor}/pg_ext"
|
|
15
|
-
ENV['PATH'] = old_path
|
|
16
|
-
else
|
|
17
|
-
raise
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
end
|
|
21
1
|
|
|
2
|
+
# -*- ruby -*-
|
|
3
|
+
# frozen_string_literal: true
|
|
22
4
|
|
|
23
5
|
# The top-level PG namespace.
|
|
24
6
|
module PG
|
|
25
7
|
|
|
26
|
-
#
|
|
27
|
-
|
|
8
|
+
# Is this file part of a fat binary gem with bundled libpq?
|
|
9
|
+
bundled_libpq_path = File.join(__dir__, RUBY_PLATFORM.gsub(/^i386-/, "x86-"))
|
|
10
|
+
if File.exist?(bundled_libpq_path)
|
|
11
|
+
POSTGRESQL_LIB_PATH = bundled_libpq_path
|
|
12
|
+
else
|
|
13
|
+
bundled_libpq_path = nil
|
|
14
|
+
# Try to load libpq path as found by extconf.rb
|
|
15
|
+
begin
|
|
16
|
+
require "pg/postgresql_lib_path"
|
|
17
|
+
rescue LoadError
|
|
18
|
+
# rake-compiler doesn't use regular "make install", but uses it's own install tasks.
|
|
19
|
+
# It therefore doesn't copy pg/postgresql_lib_path.rb in case of "rake compile".
|
|
20
|
+
POSTGRESQL_LIB_PATH = false
|
|
21
|
+
end
|
|
22
|
+
end
|
|
28
23
|
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
add_dll_path = proc do |path, &block|
|
|
25
|
+
if RUBY_PLATFORM =~/(mswin|mingw)/i && path && File.exist?(path)
|
|
26
|
+
begin
|
|
27
|
+
require 'ruby_installer/runtime'
|
|
28
|
+
RubyInstaller::Runtime.add_dll_directory(path, &block)
|
|
29
|
+
rescue LoadError
|
|
30
|
+
old_path = ENV['PATH']
|
|
31
|
+
ENV['PATH'] = "#{path};#{old_path}"
|
|
32
|
+
block.call
|
|
33
|
+
ENV['PATH'] = old_path
|
|
34
|
+
end
|
|
35
|
+
else
|
|
36
|
+
# No need to set a load path manually - it's set as library rpath.
|
|
37
|
+
block.call
|
|
38
|
+
end
|
|
39
|
+
end
|
|
31
40
|
|
|
32
|
-
|
|
41
|
+
# Add a load path to the one retrieved from pg_config
|
|
42
|
+
add_dll_path.call(POSTGRESQL_LIB_PATH) do
|
|
43
|
+
if bundled_libpq_path
|
|
44
|
+
# It's a Windows binary gem, try the <major>.<minor> subdirectory
|
|
45
|
+
major_minor = RUBY_VERSION[ /^(\d+\.\d+)/ ] or
|
|
46
|
+
raise "Oops, can't extract the major/minor version from #{RUBY_VERSION.dump}"
|
|
47
|
+
require "#{major_minor}/pg_ext"
|
|
48
|
+
else
|
|
49
|
+
require 'pg_ext'
|
|
50
|
+
end
|
|
33
51
|
end
|
|
34
52
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
53
|
+
# Get the PG library version.
|
|
54
|
+
#
|
|
55
|
+
# +include_buildnum+ is no longer used and any value passed will be ignored.
|
|
56
|
+
def self.version_string( include_buildnum=nil )
|
|
57
|
+
"%s %s" % [ self.name, VERSION ]
|
|
40
58
|
end
|
|
41
59
|
|
|
42
60
|
|
|
43
61
|
### Convenience alias for PG::Connection.new.
|
|
44
|
-
def self
|
|
45
|
-
|
|
62
|
+
def self.connect( *args, &block )
|
|
63
|
+
Connection.new( *args, &block )
|
|
46
64
|
end
|
|
47
65
|
|
|
66
|
+
if defined?(Ractor.make_shareable)
|
|
67
|
+
def self.make_shareable(obj)
|
|
68
|
+
Ractor.make_shareable(obj)
|
|
69
|
+
end
|
|
70
|
+
else
|
|
71
|
+
def self.make_shareable(obj)
|
|
72
|
+
obj.freeze
|
|
73
|
+
end
|
|
74
|
+
end
|
|
48
75
|
|
|
76
|
+
module BinaryDecoder
|
|
77
|
+
%i[ TimestampUtc TimestampUtcToLocal TimestampLocal ].each do |klass|
|
|
78
|
+
autoload klass, 'pg/binary_decoder/timestamp'
|
|
79
|
+
end
|
|
80
|
+
autoload :Date, 'pg/binary_decoder/date'
|
|
81
|
+
end
|
|
82
|
+
module BinaryEncoder
|
|
83
|
+
%i[ TimestampUtc TimestampLocal ].each do |klass|
|
|
84
|
+
autoload klass, 'pg/binary_encoder/timestamp'
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
module TextDecoder
|
|
88
|
+
%i[ TimestampUtc TimestampUtcToLocal TimestampLocal TimestampWithoutTimeZone TimestampWithTimeZone ].each do |klass|
|
|
89
|
+
autoload klass, 'pg/text_decoder/timestamp'
|
|
90
|
+
end
|
|
91
|
+
autoload :Date, 'pg/text_decoder/date'
|
|
92
|
+
autoload :Inet, 'pg/text_decoder/inet'
|
|
93
|
+
autoload :JSON, 'pg/text_decoder/json'
|
|
94
|
+
autoload :Numeric, 'pg/text_decoder/numeric'
|
|
95
|
+
end
|
|
96
|
+
module TextEncoder
|
|
97
|
+
%i[ TimestampUtc TimestampWithoutTimeZone TimestampWithTimeZone ].each do |klass|
|
|
98
|
+
autoload klass, 'pg/text_encoder/timestamp'
|
|
99
|
+
end
|
|
100
|
+
autoload :Date, 'pg/text_encoder/date'
|
|
101
|
+
autoload :Inet, 'pg/text_encoder/inet'
|
|
102
|
+
autoload :JSON, 'pg/text_encoder/json'
|
|
103
|
+
autoload :Numeric, 'pg/text_encoder/numeric'
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
autoload :BasicTypeMapBasedOnResult, 'pg/basic_type_map_based_on_result'
|
|
107
|
+
autoload :BasicTypeMapForQueries, 'pg/basic_type_map_for_queries'
|
|
108
|
+
autoload :BasicTypeMapForResults, 'pg/basic_type_map_for_results'
|
|
109
|
+
autoload :BasicTypeRegistry, 'pg/basic_type_registry'
|
|
49
110
|
require 'pg/exceptions'
|
|
50
|
-
require 'pg/constants'
|
|
51
111
|
require 'pg/coder'
|
|
52
|
-
require 'pg/text_encoder'
|
|
53
|
-
require 'pg/text_decoder'
|
|
54
|
-
require 'pg/basic_type_mapping'
|
|
55
112
|
require 'pg/type_map_by_column'
|
|
56
113
|
require 'pg/connection'
|
|
57
114
|
require 'pg/result'
|
|
115
|
+
require 'pg/tuple'
|
|
116
|
+
autoload :VERSION, 'pg/version'
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
# Avoid "uninitialized constant Truffle::WarningOperations" on Truffleruby up to 22.3.1
|
|
120
|
+
if RUBY_ENGINE=="truffleruby" && !defined?(Truffle::WarningOperations)
|
|
121
|
+
module TruffleFixWarn
|
|
122
|
+
def warn(str, category=nil)
|
|
123
|
+
super(str)
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
Warning.extend(TruffleFixWarn)
|
|
127
|
+
end
|
|
58
128
|
|
|
59
129
|
end # module PG
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
# Backward-compatible aliase
|
|
63
|
-
PGError = PG::Error
|
|
64
|
-
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
|
|
3
|
+
PGHOST = 'localhost'
|
|
4
|
+
PGDB = 'test'
|
|
5
|
+
#SOCKHOST = 'github.com'
|
|
6
|
+
SOCKHOST = 'it-trac.laika.com'
|
|
7
|
+
|
|
8
|
+
# Load pg first, so the libssl.so that libpq is linked against is loaded.
|
|
9
|
+
require 'pg'
|
|
10
|
+
$stderr.puts "connecting to postgres://#{PGHOST}/#{PGDB}"
|
|
11
|
+
conn = PG.connect( PGHOST, :dbname => PGDB )
|
|
12
|
+
|
|
13
|
+
# Now load OpenSSL, which might be linked against a different libssl.
|
|
14
|
+
require 'socket'
|
|
15
|
+
require 'openssl'
|
|
16
|
+
$stderr.puts "Connecting to #{SOCKHOST}"
|
|
17
|
+
sock = TCPSocket.open( SOCKHOST, 443 )
|
|
18
|
+
ctx = OpenSSL::SSL::SSLContext.new
|
|
19
|
+
sock = OpenSSL::SSL::SSLSocket.new( sock, ctx )
|
|
20
|
+
sock.sync_close = true
|
|
21
|
+
|
|
22
|
+
# The moment of truth...
|
|
23
|
+
$stderr.puts "Attempting to connect..."
|
|
24
|
+
begin
|
|
25
|
+
sock.connect
|
|
26
|
+
rescue Errno
|
|
27
|
+
$stderr.puts "Got an error connecting, but no segfault."
|
|
28
|
+
else
|
|
29
|
+
$stderr.puts "Nope, no segfault!"
|
|
30
|
+
end
|
|
31
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
= postgres
|
|
2
|
+
|
|
3
|
+
* https://github.com/ged/ruby-pg
|
|
4
|
+
|
|
5
|
+
== Description
|
|
6
|
+
|
|
7
|
+
This is an old, deprecated version of the Ruby PostgreSQL driver that hasn't
|
|
8
|
+
been maintained or supported since early 2008.
|
|
9
|
+
|
|
10
|
+
You should install/require 'pg' instead.
|
|
11
|
+
|
|
12
|
+
If you need the 'postgres' gem for legacy code that can't be converted, you can
|
|
13
|
+
still install it using an explicit version, like so:
|
|
14
|
+
|
|
15
|
+
gem install postgres -v '0.7.9.2008.01.28'
|
|
16
|
+
gem uninstall postgres -v '>0.7.9.2008.01.28'
|
|
17
|
+
|
|
18
|
+
If you have any questions, the nice folks in the Google group can help:
|
|
19
|
+
|
|
20
|
+
http://goo.gl/OjOPP / ruby-pg@googlegroups.com
|
|
21
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
|
|
3
|
+
require 'date'
|
|
4
|
+
require 'rubygems'
|
|
5
|
+
require 'hoe'
|
|
6
|
+
require 'pp'
|
|
7
|
+
|
|
8
|
+
Hoe.spec 'postgres' do
|
|
9
|
+
self.developer 'Michael Granger', 'ged@FaerieMUD.org'
|
|
10
|
+
self.dependency 'pg', '~> 0'
|
|
11
|
+
self.spec_extras[:date] = Date.parse( '2008/01/30' )
|
|
12
|
+
|
|
13
|
+
line = '-' * 75
|
|
14
|
+
msg = paragraphs_of( 'README.txt', 3..-1 )
|
|
15
|
+
msg.unshift( line )
|
|
16
|
+
msg.push( line )
|
|
17
|
+
|
|
18
|
+
self.spec_extras[:post_install_message] = msg.join( "\n\n" ) + "\n"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# vim: syntax=ruby
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
|
|
3
|
+
require 'pathname'
|
|
4
|
+
|
|
5
|
+
module Postgres
|
|
6
|
+
|
|
7
|
+
VERSION = '0.8.1'
|
|
8
|
+
|
|
9
|
+
gemdir = Pathname( __FILE__ ).dirname.parent
|
|
10
|
+
readme = gemdir + 'README.txt'
|
|
11
|
+
|
|
12
|
+
header, message = readme.read.split( /^== Description/m )
|
|
13
|
+
abort( message.strip )
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
= ruby-pg
|
|
2
|
+
|
|
3
|
+
* https://github.com/ged/ruby-pg
|
|
4
|
+
|
|
5
|
+
== Description
|
|
6
|
+
|
|
7
|
+
This is an old, deprecated version of the 'pg' gem that hasn't been
|
|
8
|
+
maintained or supported since early 2008.
|
|
9
|
+
|
|
10
|
+
You should install/require 'pg' instead.
|
|
11
|
+
|
|
12
|
+
If you need ruby-pg for legacy code that can't be converted, you can still
|
|
13
|
+
install it using an explicit version, like so:
|
|
14
|
+
|
|
15
|
+
gem install ruby-pg -v '0.7.9.2008.01.28'
|
|
16
|
+
gem uninstall ruby-pg -v '>0.7.9.2008.01.28'
|
|
17
|
+
|
|
18
|
+
If you have any questions, the nice folks in the Google group can help:
|
|
19
|
+
|
|
20
|
+
http://goo.gl/OjOPP / ruby-pg@googlegroups.com
|
|
21
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
|
|
3
|
+
require 'date'
|
|
4
|
+
require 'rubygems'
|
|
5
|
+
require 'hoe'
|
|
6
|
+
require 'pp'
|
|
7
|
+
|
|
8
|
+
Hoe.spec 'ruby-pg' do
|
|
9
|
+
self.developer 'Michael Granger', 'ged@FaerieMUD.org'
|
|
10
|
+
self.dependency 'pg', '~> 0'
|
|
11
|
+
self.spec_extras[:date] = Date.parse( '2008/01/30' )
|
|
12
|
+
|
|
13
|
+
line = '-' * 75
|
|
14
|
+
msg = paragraphs_of( 'README.txt', 3..-1 )
|
|
15
|
+
msg.unshift( line )
|
|
16
|
+
msg.push( line )
|
|
17
|
+
|
|
18
|
+
self.spec_extras[:post_install_message] = msg.join( "\n\n" ) + "\n"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# vim: syntax=ruby
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# -*- ruby -*-
|
|
2
|
+
|
|
3
|
+
require 'pathname'
|
|
4
|
+
|
|
5
|
+
module Pg
|
|
6
|
+
|
|
7
|
+
VERSION = '0.8.0'
|
|
8
|
+
|
|
9
|
+
gemdir = Pathname( __FILE__ ).dirname.parent.parent
|
|
10
|
+
readme = gemdir + 'README.txt'
|
|
11
|
+
|
|
12
|
+
header, message = readme.read.split( /^== Description/m )
|
|
13
|
+
abort( message.strip )
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|