pg 0.18.4 → 1.0.0
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/BSDL +2 -2
- data/ChangeLog +689 -5
- data/History.rdoc +84 -0
- data/Manifest.txt +0 -18
- data/README.rdoc +13 -10
- data/Rakefile +16 -19
- data/Rakefile.cross +21 -24
- data/ext/errorcodes.def +33 -0
- data/ext/errorcodes.txt +15 -1
- data/ext/extconf.rb +21 -33
- data/ext/gvl_wrappers.c +4 -0
- data/ext/gvl_wrappers.h +27 -39
- data/ext/pg.c +18 -50
- data/ext/pg.h +13 -80
- data/ext/pg_binary_encoder.c +8 -8
- data/ext/pg_coder.c +31 -10
- data/ext/pg_connection.c +340 -225
- data/ext/pg_copy_coder.c +34 -4
- data/ext/pg_result.c +24 -22
- data/ext/pg_text_encoder.c +62 -42
- data/ext/pg_type_map.c +14 -7
- data/lib/pg/basic_type_mapping.rb +35 -8
- data/lib/pg/connection.rb +53 -12
- data/lib/pg/result.rb +10 -5
- data/lib/pg/text_decoder.rb +7 -0
- data/lib/pg/text_encoder.rb +8 -0
- data/lib/pg.rb +18 -10
- data/spec/helpers.rb +8 -15
- data/spec/pg/basic_type_mapping_spec.rb +54 -0
- data/spec/pg/connection_spec.rb +384 -209
- data/spec/pg/result_spec.rb +14 -7
- data/spec/pg/type_map_by_class_spec.rb +2 -2
- data/spec/pg/type_map_by_mri_type_spec.rb +1 -1
- data/spec/pg/type_spec.rb +83 -3
- data/spec/pg_spec.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +55 -64
- metadata.gz.sig +0 -0
- data/sample/array_insert.rb +0 -20
- data/sample/async_api.rb +0 -106
- data/sample/async_copyto.rb +0 -39
- data/sample/async_mixed.rb +0 -56
- data/sample/check_conn.rb +0 -21
- data/sample/copyfrom.rb +0 -81
- data/sample/copyto.rb +0 -19
- data/sample/cursor.rb +0 -21
- data/sample/disk_usage_report.rb +0 -186
- data/sample/issue-119.rb +0 -94
- data/sample/losample.rb +0 -69
- data/sample/minimal-testcase.rb +0 -17
- data/sample/notify_wait.rb +0 -72
- data/sample/pg_statistics.rb +0 -294
- data/sample/replication_monitor.rb +0 -231
- data/sample/test_binary_values.rb +0 -33
- data/sample/wal_shipper.rb +0 -434
- data/sample/warehouse_partitions.rb +0 -320
data/History.rdoc
CHANGED
@@ -1,3 +1,87 @@
|
|
1
|
+
== v1.0.0 [2018-01-10] Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
Deprecated:
|
4
|
+
- Deprecate Ruby older than 2.2.
|
5
|
+
- Deprecate Connection#socket in favor of #socket_io.
|
6
|
+
|
7
|
+
Removed:
|
8
|
+
- Remove compatibility code for Ruby < 2.0 and PostgreSQL < 9.2.
|
9
|
+
- Remove partial compatibility with Rubinius.
|
10
|
+
|
11
|
+
Enhancements:
|
12
|
+
- Update error codes to PostgreSQL-10
|
13
|
+
- Update Windows binary gems to Ruby-2.5, PostgreSQL 10.1 and
|
14
|
+
OpenSSL 1.1.0g.
|
15
|
+
|
16
|
+
Bugfixes:
|
17
|
+
- Fix URI detection for connection strings. #265 (thanks to jjoos)
|
18
|
+
- MINGW: Workaround segfault due to GCC linker error in conjunction with MSVC.
|
19
|
+
This happens when linking to PostgreSQL-10.0-x64 from EnterpriseDB.
|
20
|
+
|
21
|
+
Documentation fixes:
|
22
|
+
- Add PostgreSQL version since when the given function is supported. #263
|
23
|
+
- Better documentation to `encoder` and `decoder` arguments of COPY related methods.
|
24
|
+
|
25
|
+
|
26
|
+
== v0.21.0 [2017-06-12] Michael Granger <ged@FaerieMUD.org>
|
27
|
+
|
28
|
+
Enhancements:
|
29
|
+
- Move add_dll_directory to the Runtime namespace for newest versions
|
30
|
+
of RubyInstaller.
|
31
|
+
- Deprecate PGconn, PGresult, and PGError top-level constants; a warning
|
32
|
+
will be output the first time one of them is used. They will be
|
33
|
+
removed in the upcoming 1.0 release.
|
34
|
+
|
35
|
+
Documentation fixes:
|
36
|
+
- Update the docs for PG::Result#cmd_tuples
|
37
|
+
|
38
|
+
New Samples:
|
39
|
+
- Add an example of the nicer #copy_data way of doing `COPY`.
|
40
|
+
|
41
|
+
|
42
|
+
== v0.20.0 [2017-03-10] Michael Granger <ged@FaerieMUD.org>
|
43
|
+
|
44
|
+
Enhancements:
|
45
|
+
- Update error codes to PostgreSQL-9.6
|
46
|
+
- Update Windows binary gems to Ruby-2.4, PostgreSQL 9.6.1 and
|
47
|
+
OpenSSL 1.0.2j.
|
48
|
+
- Add support for RubyInstaller2 to Windows binary gems.
|
49
|
+
|
50
|
+
Bugfixes:
|
51
|
+
- Use secure JSON methods for JSON (de)serialisation. #248
|
52
|
+
- Fix Result#inspect on a cleared result.
|
53
|
+
- Fix test case that failed on Ruby-2.4. #255
|
54
|
+
|
55
|
+
Documentation fixes:
|
56
|
+
- Talk about Integer instead of Fixnum.
|
57
|
+
- Fix method signature of Coder#encode.
|
58
|
+
|
59
|
+
|
60
|
+
== v0.19.0 [2016-09-21] Michael Granger <ged@FaerieMUD.org>
|
61
|
+
|
62
|
+
- Deprecate Ruby 1.9
|
63
|
+
|
64
|
+
Enhancements:
|
65
|
+
- Respect and convert character encoding of all strings sent
|
66
|
+
to the server. #231
|
67
|
+
- Add PostgreSQL-9.5 functions PQsslInUse(), PQsslAttribute()
|
68
|
+
and PQsslAttributeNames().
|
69
|
+
- Various documentation fixes and improvements.
|
70
|
+
- Add mechanism to build without pg_config:
|
71
|
+
gem install pg -- --with-pg-config=ignore
|
72
|
+
- Update Windows binary gems to Ruby-2.3, PostgreSQL 9.5.4 and
|
73
|
+
OpenSSL 1.0.2f.
|
74
|
+
- Add JSON coders and add them to BasicTypeMapForResults and
|
75
|
+
BasicTypeMapBasedOnResult
|
76
|
+
- Allow build from git per bundler.
|
77
|
+
|
78
|
+
Bugfixes:
|
79
|
+
- Release GVL while calling PQsetClientEncoding(). #245
|
80
|
+
- Add __EXTENSIONS__ to Solaris/SmartOS for Ruby >= 2.3.x. #236
|
81
|
+
- Fix wrong exception when running SQL while in Connection#copy_data
|
82
|
+
block for output
|
83
|
+
|
84
|
+
|
1
85
|
== v0.18.4 [2015-11-13] Michael Granger <ged@FaerieMUD.org>
|
2
86
|
|
3
87
|
Enhancements:
|
data/Manifest.txt
CHANGED
@@ -51,24 +51,6 @@ lib/pg/result.rb
|
|
51
51
|
lib/pg/text_decoder.rb
|
52
52
|
lib/pg/text_encoder.rb
|
53
53
|
lib/pg/type_map_by_column.rb
|
54
|
-
sample/array_insert.rb
|
55
|
-
sample/async_api.rb
|
56
|
-
sample/async_copyto.rb
|
57
|
-
sample/async_mixed.rb
|
58
|
-
sample/check_conn.rb
|
59
|
-
sample/copyfrom.rb
|
60
|
-
sample/copyto.rb
|
61
|
-
sample/cursor.rb
|
62
|
-
sample/disk_usage_report.rb
|
63
|
-
sample/issue-119.rb
|
64
|
-
sample/losample.rb
|
65
|
-
sample/minimal-testcase.rb
|
66
|
-
sample/notify_wait.rb
|
67
|
-
sample/pg_statistics.rb
|
68
|
-
sample/replication_monitor.rb
|
69
|
-
sample/test_binary_values.rb
|
70
|
-
sample/wal_shipper.rb
|
71
|
-
sample/warehouse_partitions.rb
|
72
54
|
spec/data/expected_trace.out
|
73
55
|
spec/data/random_binary_data
|
74
56
|
spec/helpers.rb
|
data/README.rdoc
CHANGED
@@ -11,7 +11,7 @@ docs :: http://deveiate.org/code/pg
|
|
11
11
|
|
12
12
|
Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].
|
13
13
|
|
14
|
-
It works with {PostgreSQL
|
14
|
+
It works with {PostgreSQL 9.2 and later}[http://www.postgresql.org/support/versioning/].
|
15
15
|
|
16
16
|
A small example usage:
|
17
17
|
|
@@ -23,7 +23,7 @@ A small example usage:
|
|
23
23
|
conn = PG.connect( dbname: 'sales' )
|
24
24
|
conn.exec( "SELECT * FROM pg_stat_activity" ) do |result|
|
25
25
|
puts " PID | User | Query"
|
26
|
-
|
26
|
+
result.each do |row|
|
27
27
|
puts " %7d | %-16s | %s " %
|
28
28
|
row.values_at('procpid', 'usename', 'current_query')
|
29
29
|
end
|
@@ -31,16 +31,16 @@ A small example usage:
|
|
31
31
|
|
32
32
|
== Build Status
|
33
33
|
|
34
|
-
{<img src="https://travis-ci.org/ged/ruby-pg.
|
34
|
+
{<img src="https://travis-ci.org/ged/ruby-pg.svg?branch=master" alt="Build Status Travis-CI" />}[https://travis-ci.org/ged/ruby-pg]
|
35
35
|
{<img src="https://ci.appveyor.com/api/projects/status/at4g4swb2cd4xji7/branch/master?svg=true" alt="Build Status Appveyor" />}[https://ci.appveyor.com/project/ged/ruby-pg]
|
36
36
|
|
37
37
|
|
38
38
|
== Requirements
|
39
39
|
|
40
|
-
* Ruby
|
41
|
-
* PostgreSQL
|
40
|
+
* Ruby 2.2 or newer
|
41
|
+
* PostgreSQL 9.2.x or later (with headers, -dev packages, etc).
|
42
42
|
|
43
|
-
It
|
43
|
+
It usually work with earlier versions of Ruby/PostgreSQL as well, but those are
|
44
44
|
not regularly tested.
|
45
45
|
|
46
46
|
|
@@ -66,6 +66,10 @@ There's also {a Google+ group}[http://goo.gl/TFy1U] and a
|
|
66
66
|
{mailing list}[http://groups.google.com/group/ruby-pg] if you get stuck, or just
|
67
67
|
want to chat about something.
|
68
68
|
|
69
|
+
If you want to install as a signed gem, the public certs of the gem signers
|
70
|
+
can be found in {the `certs` directory}[https://bitbucket.org/ged/ruby-pg/src/tip/certs/]
|
71
|
+
of the repository.
|
72
|
+
|
69
73
|
|
70
74
|
== Type Casts
|
71
75
|
|
@@ -112,7 +116,7 @@ needs for type casting. The default type map is PG::TypeMapAllStrings.
|
|
112
116
|
|
113
117
|
A type map can be assigned per connection or per query respectively per
|
114
118
|
result set. Type maps can also be used for COPY in and out data streaming.
|
115
|
-
|
119
|
+
See PG::Connection#copy_data .
|
116
120
|
|
117
121
|
== Contributing
|
118
122
|
|
@@ -133,7 +137,7 @@ Lars Kanis <lars@greiz-reinsdorf.de>.
|
|
133
137
|
|
134
138
|
== Copying
|
135
139
|
|
136
|
-
Copyright (c) 1997-
|
140
|
+
Copyright (c) 1997-2016 by the authors.
|
137
141
|
|
138
142
|
* Jeff Davis <ruby-pg@j-davis.com>
|
139
143
|
* Guy Decoux (ts) <decoux@moulon.inra.fr>
|
@@ -145,7 +149,7 @@ Copyright (c) 1997-2015 by the authors.
|
|
145
149
|
* Noboru Saitou <noborus@netlab.jp>
|
146
150
|
|
147
151
|
You may redistribute this software under the same terms as Ruby itself; see
|
148
|
-
|
152
|
+
https://www.ruby-lang.org/en/about/license.txt or the BSDL file in the source
|
149
153
|
for details.
|
150
154
|
|
151
155
|
Portions of the code are from the PostgreSQL project, and are distributed
|
@@ -161,4 +165,3 @@ to this library over the years.
|
|
161
165
|
|
162
166
|
We are thankful to the people at the ruby-list and ruby-dev mailing lists.
|
163
167
|
And to the people who developed PostgreSQL.
|
164
|
-
|
data/Rakefile
CHANGED
@@ -55,22 +55,21 @@ $hoespec = Hoe.spec 'pg' do
|
|
55
55
|
self.extra_rdoc_files = Rake::FileList[ '*.rdoc' ]
|
56
56
|
self.extra_rdoc_files.include( 'POSTGRES', 'LICENSE' )
|
57
57
|
self.extra_rdoc_files.include( 'ext/*.c' )
|
58
|
-
self.license
|
58
|
+
self.license 'BSD-3-Clause'
|
59
59
|
|
60
60
|
self.developer 'Michael Granger', 'ged@FaerieMUD.org'
|
61
61
|
self.developer 'Lars Kanis', 'lars@greiz-reinsdorf.de'
|
62
62
|
|
63
|
-
self.dependency 'rake-compiler', '~> 0
|
64
|
-
self.dependency 'rake-compiler-dock', '~> 0.
|
65
|
-
self.dependency 'hoe', '~>
|
66
|
-
self.dependency 'hoe-deveiate', '~> 0.6', :developer
|
63
|
+
self.dependency 'rake-compiler', '~> 1.0', :developer
|
64
|
+
self.dependency 'rake-compiler-dock', ['~> 0.6', '>= 0.6.2'], :developer
|
65
|
+
self.dependency 'hoe-deveiate', '~> 0.9', :developer
|
67
66
|
self.dependency 'hoe-bundler', '~> 1.0', :developer
|
68
|
-
self.dependency 'rspec', '~> 3.
|
67
|
+
self.dependency 'rspec', '~> 3.5', :developer
|
68
|
+
self.dependency 'rdoc', '~> 5.1', :developer
|
69
69
|
|
70
|
-
self.spec_extras[:licenses] = ['BSD', 'Ruby', 'GPL']
|
71
70
|
self.spec_extras[:extensions] = [ 'ext/extconf.rb' ]
|
72
71
|
|
73
|
-
self.require_ruby_version( '>=
|
72
|
+
self.require_ruby_version( '>= 2.0.0' )
|
74
73
|
|
75
74
|
self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags= )
|
76
75
|
self.check_history_on_release = true if self.respond_to?( :check_history_on_release= )
|
@@ -81,7 +80,7 @@ end
|
|
81
80
|
ENV['VERSION'] ||= $hoespec.spec.version.to_s
|
82
81
|
|
83
82
|
# Tests should pass before checking in
|
84
|
-
task 'hg:precheckin' => [ :check_history, :check_manifest, :spec ]
|
83
|
+
task 'hg:precheckin' => [ :check_history, :check_manifest, :spec, :gemspec ]
|
85
84
|
|
86
85
|
# Support for 'rvm specs'
|
87
86
|
task :specs => :spec
|
@@ -97,7 +96,7 @@ task :test do
|
|
97
96
|
# the installed gem dir. So we clear the task rake-compiler set up
|
98
97
|
# to break the dependency between :spec and :compile when running under
|
99
98
|
# rubygems-test, and then run :spec.
|
100
|
-
Rake::Task[ EXT.to_s ].clear
|
99
|
+
Rake::Task[ EXT.to_s ].clear if File.exist?(EXT.to_s)
|
101
100
|
Rake::Task[ :spec ].execute
|
102
101
|
end
|
103
102
|
|
@@ -106,8 +105,6 @@ task :maint do
|
|
106
105
|
ENV['MAINTAINER_MODE'] = 'yes'
|
107
106
|
end
|
108
107
|
|
109
|
-
ENV['RUBY_CC_VERSION'] ||= '1.8.7:1.9.2:2.0.0'
|
110
|
-
|
111
108
|
# Rake-compiler task
|
112
109
|
Rake::ExtensionTask.new do |ext|
|
113
110
|
ext.name = 'pg_ext'
|
@@ -132,8 +129,7 @@ Rake::ExtensionTask.new do |ext|
|
|
132
129
|
|
133
130
|
# Add libpq.dll to windows binary gemspec
|
134
131
|
ext.cross_compiling do |spec|
|
135
|
-
|
136
|
-
spec.files << "lib/#{spec.platform.to_s.gsub(/^x86-/, "i386-")}/libpq.dll"
|
132
|
+
spec.files << "lib/libpq.dll"
|
137
133
|
end
|
138
134
|
end
|
139
135
|
|
@@ -157,6 +153,7 @@ end
|
|
157
153
|
file '.hg/branch' do
|
158
154
|
warn "WARNING: You need the Mercurial repo to update the ChangeLog"
|
159
155
|
end
|
156
|
+
Rake::Task["ChangeLog"].clear
|
160
157
|
file 'ChangeLog' do |task|
|
161
158
|
if File.exist?('.hg/branch')
|
162
159
|
$stderr.puts "Updating the changelog..."
|
@@ -187,13 +184,11 @@ end
|
|
187
184
|
|
188
185
|
desc "Update list of server error codes"
|
189
186
|
task :update_error_codes do
|
190
|
-
URL_ERRORCODES_TXT = "http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;f=src/backend/utils/errcodes.txt;hb=
|
187
|
+
URL_ERRORCODES_TXT = "http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob_plain;f=src/backend/utils/errcodes.txt;hb=refs/tags/REL_10_1"
|
191
188
|
|
192
189
|
ERRORCODES_TXT = "ext/errorcodes.txt"
|
193
190
|
sh "wget #{URL_ERRORCODES_TXT.inspect} -O #{ERRORCODES_TXT.inspect} || curl #{URL_ERRORCODES_TXT.inspect} -o #{ERRORCODES_TXT.inspect}"
|
194
|
-
end
|
195
191
|
|
196
|
-
file 'ext/errorcodes.def' => ['ext/errorcodes.rb', 'ext/errorcodes.txt'] do
|
197
192
|
ruby 'ext/errorcodes.rb', 'ext/errorcodes.txt', 'ext/errorcodes.def'
|
198
193
|
end
|
199
194
|
|
@@ -207,12 +202,14 @@ file GEMSPEC => __FILE__
|
|
207
202
|
task GEMSPEC do |task|
|
208
203
|
spec = $hoespec.spec
|
209
204
|
spec.files.delete( '.gemtest' )
|
210
|
-
spec.
|
205
|
+
spec.signing_key = nil
|
206
|
+
spec.version = "#{spec.version.bump}.0.pre#{Time.now.strftime("%Y%m%d%H%M%S")}"
|
207
|
+
spec.cert_chain = [ 'certs/ged.pem' ]
|
211
208
|
File.open( task.name, 'w' ) do |fh|
|
212
209
|
fh.write( spec.to_ruby )
|
213
210
|
end
|
214
211
|
end
|
215
212
|
|
216
|
-
CLOBBER.include(
|
213
|
+
CLOBBER.include( '*.gemspec' )
|
217
214
|
task :default => :gemspec
|
218
215
|
|
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.
|
33
|
-
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '
|
32
|
+
self.openssl_version = ENV['OPENSSL_VERSION'] || '1.1.0g'
|
33
|
+
self.postgresql_version = ENV['POSTGRESQL_VERSION'] || '10.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.
|
@@ -54,8 +54,8 @@ class CrossLibrary < OpenStruct
|
|
54
54
|
self.openssl_tarball = static_sourcesdir + File.basename( openssl_source_uri.path )
|
55
55
|
self.openssl_makefile = static_openssl_builddir + 'Makefile'
|
56
56
|
|
57
|
-
self.
|
58
|
-
self.
|
57
|
+
self.libssl = static_openssl_builddir + 'libssl.a'
|
58
|
+
self.libcrypto = static_openssl_builddir + 'libcrypto.a'
|
59
59
|
|
60
60
|
self.openssl_patches = Rake::FileList[ (MISCDIR + "openssl-#{openssl_version}.*.patch").to_s ]
|
61
61
|
|
@@ -82,8 +82,6 @@ class CrossLibrary < OpenStruct
|
|
82
82
|
CLEAN.include( static_builddir.to_s )
|
83
83
|
|
84
84
|
|
85
|
-
ENV['RUBY_CC_VERSION'] ||= '1.9.3:2.0.0'
|
86
|
-
|
87
85
|
def download(url, save_to)
|
88
86
|
part = save_to+".part"
|
89
87
|
sh "wget #{url.to_s.inspect} -O #{part.inspect} || curl #{url.to_s.inspect} -o #{part.inspect}"
|
@@ -126,11 +124,9 @@ class CrossLibrary < OpenStruct
|
|
126
124
|
end
|
127
125
|
|
128
126
|
self.cmd_prelude = [
|
129
|
-
|
130
|
-
"
|
127
|
+
"env",
|
128
|
+
"CROSS_COMPILE=#{host_platform}-",
|
131
129
|
"CFLAGS=-DDSO_WIN32",
|
132
|
-
"AR=#{host_platform}-ar",
|
133
|
-
"RANLIB=#{host_platform}-ranlib"
|
134
130
|
]
|
135
131
|
|
136
132
|
|
@@ -145,7 +141,7 @@ class CrossLibrary < OpenStruct
|
|
145
141
|
end
|
146
142
|
|
147
143
|
desc "compile static openssl libraries"
|
148
|
-
task :openssl_libs => [
|
144
|
+
task :openssl_libs => [ libssl, libcrypto ]
|
149
145
|
|
150
146
|
task :compile_static_openssl => openssl_makefile do |t|
|
151
147
|
chdir( static_openssl_builddir ) do
|
@@ -156,14 +152,14 @@ class CrossLibrary < OpenStruct
|
|
156
152
|
end
|
157
153
|
end
|
158
154
|
|
159
|
-
desc "compile static #{
|
160
|
-
file
|
161
|
-
|
155
|
+
desc "compile static #{libssl}"
|
156
|
+
file libssl => :compile_static_openssl do |t|
|
157
|
+
rm t.name.gsub(/\.a$/, ".dll.a")
|
162
158
|
end
|
163
159
|
|
164
|
-
desc "compile static #{
|
165
|
-
file
|
166
|
-
|
160
|
+
desc "compile static #{libcrypto}"
|
161
|
+
file libcrypto => :compile_static_openssl do |t|
|
162
|
+
rm t.name.gsub(/\.a$/, ".dll.a")
|
167
163
|
end
|
168
164
|
|
169
165
|
|
@@ -207,7 +203,7 @@ class CrossLibrary < OpenStruct
|
|
207
203
|
cmd << "CFLAGS=-L#{static_openssl_builddir}"
|
208
204
|
cmd << "LDFLAGS=-L#{static_openssl_builddir}"
|
209
205
|
cmd << "LDFLAGS_SL=-L#{static_openssl_builddir}"
|
210
|
-
cmd << "LIBS=-lwsock32 -lgdi32"
|
206
|
+
cmd << "LIBS=-lwsock32 -lgdi32 -lws2_32"
|
211
207
|
cmd << "CPPFLAGS=-I#{static_openssl_builddir}/include"
|
212
208
|
|
213
209
|
run( *cmd )
|
@@ -226,7 +222,7 @@ class CrossLibrary < OpenStruct
|
|
226
222
|
sh 'make',
|
227
223
|
"-j#{NUM_CPUS}",
|
228
224
|
postgresql_lib.basename.to_s,
|
229
|
-
'SHLIB_LINK=-
|
225
|
+
'SHLIB_LINK=-lssl -lcrypto -lcrypt32 -lgdi32 -lsecur32 -lwsock32 -lws2_32'
|
230
226
|
end
|
231
227
|
end
|
232
228
|
|
@@ -235,7 +231,7 @@ class CrossLibrary < OpenStruct
|
|
235
231
|
task :libpq => postgresql_lib
|
236
232
|
|
237
233
|
# copy libpq.dll to lib dir
|
238
|
-
dest_libpq = "lib/#{
|
234
|
+
dest_libpq = "lib/#{postgresql_lib.basename}"
|
239
235
|
directory File.dirname(dest_libpq)
|
240
236
|
file dest_libpq => [postgresql_lib, File.dirname(dest_libpq)] do
|
241
237
|
cp postgresql_lib, dest_libpq
|
@@ -290,12 +286,13 @@ task 'gem:windows' => ['ChangeLog'] do
|
|
290
286
|
|
291
287
|
# Copy gem signing key and certs to be accessable from the docker container
|
292
288
|
mkdir_p 'build/gem'
|
293
|
-
sh "cp ~/.gem/gem-*.pem build/gem/"
|
289
|
+
sh "cp ~/.gem/gem-*.pem build/gem/ || true"
|
290
|
+
sh "bundle package"
|
294
291
|
|
295
292
|
RakeCompilerDock.sh <<-EOT
|
296
293
|
mkdir ~/.gem &&
|
297
|
-
cp build/gem/gem-*.pem ~/.gem/ &&
|
298
|
-
bundle install &&
|
299
|
-
rake cross native gem
|
294
|
+
(cp build/gem/gem-*.pem ~/.gem/ || true) &&
|
295
|
+
bundle install --local &&
|
296
|
+
rake cross native gem RUBY_CC_VERSION=2.5.0:2.4.0:2.3.0:2.2.2:2.1.6:2.0.0
|
300
297
|
EOT
|
301
298
|
end
|
data/ext/errorcodes.def
CHANGED
@@ -198,6 +198,14 @@
|
|
198
198
|
VALUE klass = define_error_class( "InvalidRowCountInResultOffsetClause", "22" );
|
199
199
|
register_error_class( "2201X", klass );
|
200
200
|
}
|
201
|
+
{
|
202
|
+
VALUE klass = define_error_class( "InvalidTablesampleArgument", "22" );
|
203
|
+
register_error_class( "2202H", klass );
|
204
|
+
}
|
205
|
+
{
|
206
|
+
VALUE klass = define_error_class( "InvalidTablesampleRepeat", "22" );
|
207
|
+
register_error_class( "2202G", klass );
|
208
|
+
}
|
201
209
|
{
|
202
210
|
VALUE klass = define_error_class( "InvalidTimeZoneDisplacementValue", "22" );
|
203
211
|
register_error_class( "22009", klass );
|
@@ -222,6 +230,10 @@
|
|
222
230
|
VALUE klass = define_error_class( "NumericValueOutOfRange", "22" );
|
223
231
|
register_error_class( "22003", klass );
|
224
232
|
}
|
233
|
+
{
|
234
|
+
VALUE klass = define_error_class( "SequenceGeneratorLimitExceeded", "22" );
|
235
|
+
register_error_class( "2200H", klass );
|
236
|
+
}
|
225
237
|
{
|
226
238
|
VALUE klass = define_error_class( "StringDataLengthMismatch", "22" );
|
227
239
|
register_error_class( "22026", klass );
|
@@ -365,6 +377,10 @@
|
|
365
377
|
VALUE klass = define_error_class( "InFailedSqlTransaction", "25" );
|
366
378
|
register_error_class( "25P02", klass );
|
367
379
|
}
|
380
|
+
{
|
381
|
+
VALUE klass = define_error_class( "IdleInTransactionSessionTimeout", "25" );
|
382
|
+
register_error_class( "25P03", klass );
|
383
|
+
}
|
368
384
|
{
|
369
385
|
VALUE klass = define_error_class( "InvalidSqlStatementName", NULL );
|
370
386
|
register_error_class( "26000", klass );
|
@@ -466,6 +482,10 @@
|
|
466
482
|
VALUE klass = define_error_class( "ERIESrfProtocolViolated", "39" );
|
467
483
|
register_error_class( "39P02", klass );
|
468
484
|
}
|
485
|
+
{
|
486
|
+
VALUE klass = define_error_class( "ERIEEventTriggerProtocolViolated", "39" );
|
487
|
+
register_error_class( "39P03", klass );
|
488
|
+
}
|
469
489
|
{
|
470
490
|
VALUE klass = define_error_class( "SavepointException", NULL );
|
471
491
|
register_error_class( "3B000", klass );
|
@@ -571,6 +591,10 @@
|
|
571
591
|
VALUE klass = define_error_class( "WrongObjectType", "42" );
|
572
592
|
register_error_class( "42809", klass );
|
573
593
|
}
|
594
|
+
{
|
595
|
+
VALUE klass = define_error_class( "GeneratedAlways", "42" );
|
596
|
+
register_error_class( "428C9", klass );
|
597
|
+
}
|
574
598
|
{
|
575
599
|
VALUE klass = define_error_class( "UndefinedColumn", "42" );
|
576
600
|
register_error_class( "42703", klass );
|
@@ -781,6 +805,11 @@
|
|
781
805
|
VALUE klass = define_error_class( "DuplicateFile", "58" );
|
782
806
|
register_error_class( "58P02", klass );
|
783
807
|
}
|
808
|
+
{
|
809
|
+
VALUE klass = define_error_class( "SnapshotTooOld", NULL );
|
810
|
+
register_error_class( "72000", klass );
|
811
|
+
register_error_class( "72", klass );
|
812
|
+
}
|
784
813
|
{
|
785
814
|
VALUE klass = define_error_class( "ConfigFileError", NULL );
|
786
815
|
register_error_class( "F0000", klass );
|
@@ -916,6 +945,10 @@
|
|
916
945
|
VALUE klass = define_error_class( "TooManyRows", "P0" );
|
917
946
|
register_error_class( "P0003", klass );
|
918
947
|
}
|
948
|
+
{
|
949
|
+
VALUE klass = define_error_class( "AssertFailure", "P0" );
|
950
|
+
register_error_class( "P0004", klass );
|
951
|
+
}
|
919
952
|
{
|
920
953
|
VALUE klass = define_error_class( "InternalError", NULL );
|
921
954
|
register_error_class( "XX000", 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-
|
5
|
+
# Copyright (c) 2003-2017, 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
|
@@ -15,6 +15,9 @@
|
|
15
15
|
# src/pl/plpgsql/src/plerrcodes.h
|
16
16
|
# a list of PL/pgSQL condition names and their SQLSTATE codes
|
17
17
|
#
|
18
|
+
# src/pl/tcl/pltclerrcodes.h
|
19
|
+
# the same, for PL/Tcl
|
20
|
+
#
|
18
21
|
# doc/src/sgml/errcodes-list.sgml
|
19
22
|
# a SGML table of error codes for inclusion in the documentation
|
20
23
|
#
|
@@ -177,12 +180,15 @@ Section: Class 22 - Data Exception
|
|
177
180
|
2201B E ERRCODE_INVALID_REGULAR_EXPRESSION invalid_regular_expression
|
178
181
|
2201W E ERRCODE_INVALID_ROW_COUNT_IN_LIMIT_CLAUSE invalid_row_count_in_limit_clause
|
179
182
|
2201X E ERRCODE_INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE invalid_row_count_in_result_offset_clause
|
183
|
+
2202H E ERRCODE_INVALID_TABLESAMPLE_ARGUMENT invalid_tablesample_argument
|
184
|
+
2202G E ERRCODE_INVALID_TABLESAMPLE_REPEAT invalid_tablesample_repeat
|
180
185
|
22009 E ERRCODE_INVALID_TIME_ZONE_DISPLACEMENT_VALUE invalid_time_zone_displacement_value
|
181
186
|
2200C E ERRCODE_INVALID_USE_OF_ESCAPE_CHARACTER invalid_use_of_escape_character
|
182
187
|
2200G E ERRCODE_MOST_SPECIFIC_TYPE_MISMATCH most_specific_type_mismatch
|
183
188
|
22004 E ERRCODE_NULL_VALUE_NOT_ALLOWED null_value_not_allowed
|
184
189
|
22002 E ERRCODE_NULL_VALUE_NO_INDICATOR_PARAMETER null_value_no_indicator_parameter
|
185
190
|
22003 E ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE numeric_value_out_of_range
|
191
|
+
2200H E ERRCODE_SEQUENCE_GENERATOR_LIMIT_EXCEEDED sequence_generator_limit_exceeded
|
186
192
|
22026 E ERRCODE_STRING_DATA_LENGTH_MISMATCH string_data_length_mismatch
|
187
193
|
22001 E ERRCODE_STRING_DATA_RIGHT_TRUNCATION string_data_right_truncation
|
188
194
|
22011 E ERRCODE_SUBSTRING_ERROR substring_error
|
@@ -227,6 +233,7 @@ Section: Class 25 - Invalid Transaction State
|
|
227
233
|
25007 E ERRCODE_SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED schema_and_data_statement_mixing_not_supported
|
228
234
|
25P01 E ERRCODE_NO_ACTIVE_SQL_TRANSACTION no_active_sql_transaction
|
229
235
|
25P02 E ERRCODE_IN_FAILED_SQL_TRANSACTION in_failed_sql_transaction
|
236
|
+
25P03 E ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT idle_in_transaction_session_timeout
|
230
237
|
|
231
238
|
Section: Class 26 - Invalid SQL Statement Name
|
232
239
|
|
@@ -278,6 +285,7 @@ Section: Class 39 - External Routine Invocation Exception
|
|
278
285
|
39004 E ERRCODE_E_R_I_E_NULL_VALUE_NOT_ALLOWED null_value_not_allowed
|
279
286
|
39P01 E ERRCODE_E_R_I_E_TRIGGER_PROTOCOL_VIOLATED trigger_protocol_violated
|
280
287
|
39P02 E ERRCODE_E_R_I_E_SRF_PROTOCOL_VIOLATED srf_protocol_violated
|
288
|
+
39P03 E ERRCODE_E_R_I_E_EVENT_TRIGGER_PROTOCOL_VIOLATED event_trigger_protocol_violated
|
281
289
|
|
282
290
|
Section: Class 3B - Savepoint Exception
|
283
291
|
|
@@ -319,6 +327,7 @@ Section: Class 42 - Syntax Error or Access Rule Violation
|
|
319
327
|
42P21 E ERRCODE_COLLATION_MISMATCH collation_mismatch
|
320
328
|
42P22 E ERRCODE_INDETERMINATE_COLLATION indeterminate_collation
|
321
329
|
42809 E ERRCODE_WRONG_OBJECT_TYPE wrong_object_type
|
330
|
+
428C9 E ERRCODE_GENERATED_ALWAYS generated_always
|
322
331
|
|
323
332
|
# Note: for ERRCODE purposes, we divide namable objects into these categories:
|
324
333
|
# databases, schemas, prepared statements, cursors, tables, columns,
|
@@ -410,6 +419,10 @@ Section: Class 58 - System Error (errors external to PostgreSQL itself)
|
|
410
419
|
58P01 E ERRCODE_UNDEFINED_FILE undefined_file
|
411
420
|
58P02 E ERRCODE_DUPLICATE_FILE duplicate_file
|
412
421
|
|
422
|
+
Section: Class 72 - Snapshot Failure
|
423
|
+
# (class borrowed from Oracle)
|
424
|
+
72000 E ERRCODE_SNAPSHOT_TOO_OLD snapshot_too_old
|
425
|
+
|
413
426
|
Section: Class F0 - Configuration File Error
|
414
427
|
|
415
428
|
# (PostgreSQL-specific error class)
|
@@ -454,6 +467,7 @@ P0000 E ERRCODE_PLPGSQL_ERROR plp
|
|
454
467
|
P0001 E ERRCODE_RAISE_EXCEPTION raise_exception
|
455
468
|
P0002 E ERRCODE_NO_DATA_FOUND no_data_found
|
456
469
|
P0003 E ERRCODE_TOO_MANY_ROWS too_many_rows
|
470
|
+
P0004 E ERRCODE_ASSERT_FAILURE assert_failure
|
457
471
|
|
458
472
|
Section: Class XX - Internal Error
|
459
473
|
|
data/ext/extconf.rb
CHANGED
@@ -24,7 +24,11 @@ if enable_config("windows-cross")
|
|
24
24
|
else
|
25
25
|
# Native build
|
26
26
|
|
27
|
-
|
27
|
+
pgconfig = with_config('pg-config') ||
|
28
|
+
with_config('pg_config') ||
|
29
|
+
find_executable('pg_config')
|
30
|
+
|
31
|
+
if pgconfig && pgconfig != 'ignore'
|
28
32
|
$stderr.puts "Using config values from %s" % [ pgconfig ]
|
29
33
|
incdir = `"#{pgconfig}" --includedir`.chomp
|
30
34
|
libdir = `"#{pgconfig}" --libdir`.chomp
|
@@ -43,6 +47,9 @@ else
|
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
50
|
+
if RUBY_VERSION >= '2.3.0' && /solaris/ =~ RUBY_PLATFORM
|
51
|
+
append_cppflags( '-D__EXTENSIONS__' )
|
52
|
+
end
|
46
53
|
|
47
54
|
find_header( 'libpq-fe.h' ) or abort "Can't find the 'libpq-fe.h header"
|
48
55
|
find_header( 'libpq/libpq-fs.h' ) or abort "Can't find the 'libpq/libpq-fs.h header"
|
@@ -53,47 +60,28 @@ abort "Can't find the PostgreSQL client library (libpq)" unless
|
|
53
60
|
have_library( 'libpq', 'PQconnectdb', ['libpq-fe.h'] ) ||
|
54
61
|
have_library( 'ms/libpq', 'PQconnectdb', ['libpq-fe.h'] )
|
55
62
|
|
63
|
+
if /mingw/ =~ RUBY_PLATFORM && RbConfig::MAKEFILE_CONFIG['CC'] =~ /gcc/
|
64
|
+
# Work around: https://sourceware.org/bugzilla/show_bug.cgi?id=22504
|
65
|
+
checking_for "workaround gcc version with link issue" do
|
66
|
+
`#{RbConfig::MAKEFILE_CONFIG['CC']} --version`.chomp =~ /\s(\d+)\.\d+\.\d+(\s|$)/ &&
|
67
|
+
$1.to_i >= 6 &&
|
68
|
+
have_library(':libpq.lib') # Prefer linking to libpq.lib over libpq.dll if available
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
56
72
|
# optional headers/functions
|
57
|
-
have_func '
|
73
|
+
have_func 'PQsetSingleRowMode' or
|
58
74
|
abort "Your PostgreSQL is too old. Either install an older version " +
|
59
|
-
"of this gem or upgrade your database."
|
60
|
-
have_func 'PQisthreadsafe'
|
61
|
-
have_func 'PQprepare'
|
62
|
-
have_func 'PQexecParams'
|
63
|
-
have_func 'PQescapeString'
|
64
|
-
have_func 'PQescapeStringConn'
|
65
|
-
have_func 'PQescapeLiteral'
|
66
|
-
have_func 'PQescapeIdentifier'
|
67
|
-
have_func 'PQgetCancel'
|
68
|
-
have_func 'lo_create'
|
69
|
-
have_func 'pg_encoding_to_char'
|
70
|
-
have_func 'pg_char_to_encoding'
|
71
|
-
have_func 'PQsetClientEncoding'
|
72
|
-
have_func 'PQlibVersion'
|
73
|
-
have_func 'PQping'
|
74
|
-
have_func 'PQsetSingleRowMode'
|
75
|
+
"of this gem or upgrade your database to at least PostgreSQL-9.2."
|
75
76
|
have_func 'PQconninfo'
|
77
|
+
have_func 'PQsslAttribute'
|
78
|
+
have_func 'PQencryptPasswordConn'
|
76
79
|
|
77
|
-
have_func 'rb_encdb_alias'
|
78
|
-
have_func 'rb_enc_alias'
|
79
|
-
have_func 'rb_thread_call_without_gvl'
|
80
|
-
have_func 'rb_thread_call_with_gvl'
|
81
|
-
have_func 'rb_thread_fd_select'
|
82
|
-
have_func 'rb_w32_wrap_io_handle'
|
83
|
-
have_func 'rb_str_modify_expand'
|
84
|
-
have_func 'rb_hash_dup'
|
85
|
-
|
86
|
-
have_const 'PGRES_COPY_BOTH', 'libpq-fe.h'
|
87
|
-
have_const 'PGRES_SINGLE_TUPLE', 'libpq-fe.h'
|
88
80
|
have_const 'PG_DIAG_TABLE_NAME', 'libpq-fe.h'
|
89
81
|
|
90
|
-
$defs.push( "-DHAVE_ST_NOTIFY_EXTRA" ) if
|
91
|
-
have_struct_member 'struct pgNotify', 'extra', 'libpq-fe.h'
|
92
|
-
|
93
82
|
# unistd.h confilicts with ruby/win32.h when cross compiling for win32 and ruby 1.9.1
|
94
83
|
have_header 'unistd.h'
|
95
84
|
have_header 'inttypes.h'
|
96
|
-
have_header 'ruby/st.h' or have_header 'st.h' or abort "pg currently requires the ruby/st.h header"
|
97
85
|
|
98
86
|
checking_for "C99 variable length arrays" do
|
99
87
|
$defs.push( "-DHAVE_VARIABLE_LENGTH_ARRAYS" ) if try_compile('void test_vla(int l){ int vla[l]; }')
|
data/ext/gvl_wrappers.c
CHANGED
@@ -5,6 +5,10 @@
|
|
5
5
|
|
6
6
|
#include "pg.h"
|
7
7
|
|
8
|
+
#ifndef HAVE_PQENCRYPTPASSWORDCONN
|
9
|
+
char *PQencryptPasswordConn(PGconn *conn, const char *passwd, const char *user, const char *algorithm){return NULL;}
|
10
|
+
#endif
|
11
|
+
|
8
12
|
FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_WRAPPER_STRUCT );
|
9
13
|
FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_SKELETON );
|
10
14
|
FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB );
|