pg 0.13.2-x86-mingw32 → 0.14.0.pre.353-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,8 +1,237 @@
1
+ 2012-06-17 Lars Kanis <kanis@comcard.de>
2
+
3
+ * Rakefile.cross, ext/extconf.rb,
4
+ misc/postgresql-9.1.4.mingw-w64-support.patch:
5
+ Update windows cross compilation tasks to the latest
6
+ Openssl+Postgresql versions and the latest mingw-w64 compiler
7
+ [a45710f8db30] [tip]
8
+
9
+ * Rakefile:
10
+ Use RbConfig instead of obsolete and deprecated Config.
11
+ [d67cbb4310ac]
12
+
13
+ 2012-06-17 Michael Granger <ged@FaerieMUD.org>
14
+
15
+ * History.rdoc, ext/pg_connection.c, lib/pg.rb:
16
+ Bumped minor version, updated history.
17
+ [a3a3177b921c]
18
+
19
+ * .hoerc, ext/pg.h, ext/pg_connection.c, ext/pg_result.c,
20
+ spec/pg/result_spec.rb:
21
+ New method: PG::Result#check. (fixes #123)
22
+
23
+ This method exposes a previously internal-only function for checking
24
+ the status of a PG::Result, primarily for people using the async
25
+ interface. The check is done for you if you're using the synchronous
26
+ interface, but there was no way to get the same behavior for results
27
+ fetched via PG::Connection#get_result.
28
+
29
+ This change also adds the PG::Connection associated with a result as
30
+ an instance variable (@connection) on the PG::Result object.
31
+
32
+ Thanks to @royaltm for the idea.
33
+ [237cc4f69f63]
34
+
35
+ * ext/pg_connection.c, spec/pg/connection_spec.rb:
36
+ New method: PG::Connection#set_default_encoding (fixes #124)
37
+
38
+ This pulls up the code that sets the client_encoding in synchronous
39
+ connections into a public method that can be called by people using
40
+ the asynchronous API to achieve the same thing once the connection
41
+ is established.
42
+
43
+ Thanks to @royaltm for the suggestion.
44
+ [6680b395e6f4]
45
+
46
+ * Manifest.txt, sample/check_conn.rb:
47
+ Adding a minimal "connection-test function" example
48
+ [15bfcbe2bd5e]
49
+
50
+ * .rvm.gems:
51
+ Bump the hoe-deveiate version in the rvm gemset
52
+ [bc2ef3d461cd]
53
+
54
+ 2012-06-12 Mahlon E. Smith <mahlon@laika.com>
55
+
56
+ * sample/warehouse_partitions.rb:
57
+ Move indexes across tablespaces along with their parents. Remove
58
+ the 'parent table' option, as we can derive that automatically from
59
+ the pg_inherits table.
60
+ [be46f44349bf]
61
+
62
+ 2012-05-07 Michael Granger <ged@FaerieMUD.org>
63
+
64
+ * Rakefile, ext/pg.c, ext/pg_connection.c, ext/pg_result.c:
65
+ Documentation fixes.
66
+ [a965926418dd]
67
+
68
+ 2012-04-23 Michael Granger <ged@FaerieMUD.org>
69
+
70
+ * Manifest.txt:
71
+ Adding Mahlon's samples to the manifest.
72
+ [997c3a247f44]
73
+
74
+ * .rvm.gems, Rakefile:
75
+ Updated dev dependencies
76
+ [cc07b81eaf18]
77
+
78
+ 2012-04-17 Mahlon E. Smith <mahlon@laika.com>
79
+
80
+ * sample/disk_usage_report.rb, sample/minimal-testcase.rb,
81
+ sample/pg_statistics.rb, sample/replication_monitor.rb,
82
+ sample/wal_shipper.rb, sample/warehouse_partitions.rb:
83
+ Add a pile of additional sample scripts that perform various
84
+ administrative tasks.
85
+
86
+ These have all been fairly well battle-tested and are in production
87
+ use at $DAYJOB, though they were cleaned up for addition to the
88
+ Ruby-PG repo.
89
+
90
+ See the top comments in each script for additional information, or
91
+ the
92
+ --help flag on any of them for usage.
93
+
94
+ - disk_usage_report
95
+
96
+ Quick reporting on the heaviest disk consumers for a
97
+ database. Nice for cronned/email reporting.
98
+
99
+ - pg_statistics
100
+
101
+ Continuous polled statistics for a database.
102
+ Suitable for graphing with gnuplot (example
103
+ included.)
104
+
105
+ - replication_monitor
106
+
107
+ A command-line monitor for slave replication lag.
108
+ Works for both streaming replication and WAL
109
+ shipping. You should be able to use it as a base to
110
+ plug into your preferred monitoring system.
111
+
112
+ - wal_shipper
113
+
114
+ A smart WAL file transfer script, similar to
115
+ PITRTools.
116
+
117
+ - warehouse_partitions
118
+
119
+ An automated tablespace migrator for older, date-
120
+ based partitioned tables.
121
+ [36ca5b412583]
122
+
123
+ 2012-04-02 Michael Granger <ged@FaerieMUD.org>
124
+
125
+ * sample/issue-119.rb:
126
+ Add a sample from <<issue 119>>
127
+ [35d75de3f5a5]
128
+
129
+ 2012-03-26 Michael Granger <ged@FaerieMUD.org>
130
+
131
+ * sample/minimal-testcase.rb:
132
+ Adding a minimal-testcase sample
133
+ [87a8dadf1fdd]
134
+
135
+ 2012-03-10 Michael Granger <ged@faeriemud.org>
136
+
137
+ * ext/pg_result.c:
138
+ Merged in larskanis/ruby-pg (pull request #7)
139
+ [4050c3412bd7]
140
+
141
+ 2012-03-10 Lars Kanis <kanis@comcard.de>
142
+
143
+ * spec/pg/result_spec.rb:
144
+ Add checks with binary data for other PG::Result methods
145
+ [ef981c14a854]
146
+
147
+ * ext/pg_result.c:
148
+ Don't associate encoding with non-text-type fields in
149
+ PGresult#getvalue. This fixes #104 .
150
+ [9c90c50ca41a]
151
+
152
+ 2012-03-09 Michael Granger <ged@FaerieMUD.org>
153
+
154
+ * ext/pg_result.c:
155
+ Avoid use of uninitialized Arrays (fixes #47).
156
+
157
+ Instead of declaring an Array at the beginning of fetching results
158
+ and pushing values onto it to return at the end (which could result
159
+ in a segfault if the GC runs during a NEWOBJ.
160
+ [6cea3cea3b2b]
161
+
162
+ 2012-03-06 Michael Granger <ged@FaerieMUD.org>
163
+
164
+ * ext/pg.c, ext/pg_result.c:
165
+ Fix the guard for PGRES_COPY_BOTH.
166
+ [4053dfd600e8]
167
+
168
+ * ext/pg.c, ext/pg_connection.c, lib/pg/connection.rb,
169
+ spec/lib/helpers.rb, spec/pg/connection_spec.rb, spec/pg_spec.rb:
170
+ Factor some library-introspection methods up into the toplevel
171
+ namespace.
172
+
173
+ - PG::Connection.library_version -> PG.library_version
174
+ - PG::Connection.isthreadsafe -> PG.is_threadsafe? (with backward-
175
+ compat aliases)
176
+ - Split up examples by PG version metadata
177
+ [e24ff9f37b12]
178
+
179
+ * Rakefile:
180
+ Depend on RSpec 2.8 for example metadata
181
+ [c0b00fdff58a]
182
+
183
+ * ext/extconf.rb, ext/pg_result.c:
184
+ ifdef'ed PGRES_COPY_BOTH
185
+ [ad4f62c38edf]
186
+
187
+ 2012-03-06 Michael Granger <ged@faeriemud.org>
188
+
189
+ * Merged in krasul/ruby-pg/issue-68 (pull request #6)
190
+ [dedcce66d5e8]
191
+
192
+ 2012-03-05 Kashif Rasul <kashif@nomad-labs.com>
193
+
194
+ * ext/pg_connection.c, ext/pg_result.c, sample/async_api.rb:
195
+ Added logic for missing cases.
196
+ [ae9e73972844] <issue-68>
197
+
198
+ 2012-03-04 Kashif Rasul <kashif@nomad-labs.com>
199
+
200
+ * ext/extconf.rb, ext/pg.c, ext/pg_connection.c,
201
+ spec/pg/connection_spec.rb:
202
+ Added server ping() API.
203
+ [fec045ed060d] <issue-68>
204
+
205
+ 2012-03-02 Kashif Rasul <kashif@nomad-labs.com>
206
+
207
+ * ext/extconf.rb, ext/pg_connection.c:
208
+ Added library_version() as a singleton method. Removed non-
209
+ singletons.
210
+ [f82d969cc755] <issue-68>
211
+
212
+ * ext/pg_connection.c:
213
+ Added missing #def to rb_define_method() calls.
214
+ [fd22651ae6c5] <issue-68>
215
+
216
+ * ext/pg_connection.c, spec/pg/connection_spec.rb,
217
+ spec/pg/result_spec.rb:
218
+ Added spec for escape_literal().
219
+ [1ce12f2fe97c] <issue-68>
220
+
221
+ * ext/pg_connection.c:
222
+ Removed unused variable.
223
+ [3b52e0e0d421] <issue-68>
224
+
225
+ * ext/extconf.rb, ext/pg_connection.c, spec/pg/connection_spec.rb:
226
+ Added PGconn#escape_literal and PGconn#escape_identifier API and a
227
+ spec to test for keepalive connection parameters.
228
+ [3bdbb90eb13b] <issue-68>
229
+
1
230
  2012-02-22 Michael Granger <ged@FaerieMUD.org>
2
231
 
3
232
  * .hgtags:
4
233
  Added tag v0.13.2 for changeset c79cd308363d
5
- [d8e73919acb6] [tip]
234
+ [d8e73919acb6]
6
235
 
7
236
  * .hgsigs:
8
237
  Added signature for changeset 41e071bdd6ed
@@ -1,3 +1,31 @@
1
+ == v0.14.0 [2012-06-17] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ Bugfixes:
4
+ #47, #104
5
+
6
+
7
+ New Methods for PostgreSQL 9 and async API support:
8
+ PG
9
+ - ::library_version
10
+
11
+ PG::Connection
12
+ - ::ping
13
+ - #escape_literal
14
+ - #escape_identifier
15
+ - #set_default_encoding
16
+
17
+ PG::Result
18
+ - #check
19
+
20
+
21
+ New Samples:
22
+
23
+ This release also comes with a collection of contributed sample scripts for
24
+ doing resource-utilization reports, graphing database statistics,
25
+ monitoring for replication lag, shipping WAL files for replication,
26
+ automated tablespace partitioning, etc. See the samples/ directory.
27
+
28
+
1
29
  == v0.13.2 [2012-02-22] Michael Granger <ged@FaerieMUD.org>
2
30
 
3
31
  - Make builds against PostgreSQL earlier than 8.3 fail with a descriptive
@@ -28,12 +28,20 @@ lib/pg/result.rb
28
28
  sample/async_api.rb
29
29
  sample/async_copyto.rb
30
30
  sample/async_mixed.rb
31
+ sample/check_conn.rb
31
32
  sample/copyfrom.rb
32
33
  sample/copyto.rb
33
34
  sample/cursor.rb
35
+ sample/disk_usage_report.rb
36
+ sample/issue-119.rb
34
37
  sample/losample.rb
38
+ sample/minimal-testcase.rb
35
39
  sample/notify_wait.rb
40
+ sample/pg_statistics.rb
41
+ sample/replication_monitor.rb
36
42
  sample/test_binary_values.rb
43
+ sample/wal_shipper.rb
44
+ sample/warehouse_partitions.rb
37
45
  spec/data/expected_trace.out
38
46
  spec/data/random_binary_data
39
47
  spec/lib/helpers.rb
data/Rakefile CHANGED
@@ -26,7 +26,7 @@ EXTDIR = BASEDIR + 'ext'
26
26
  PKGDIR = BASEDIR + 'pkg'
27
27
  TMPDIR = BASEDIR + 'tmp'
28
28
 
29
- DLEXT = Config::CONFIG['DLEXT']
29
+ DLEXT = RbConfig::CONFIG['DLEXT']
30
30
  EXT = LIBDIR + "pg_ext.#{DLEXT}"
31
31
 
32
32
  TEST_DIRECTORY = BASEDIR + "tmp_test_specs"
@@ -37,6 +37,7 @@ CLEAN.include( PKGDIR.to_s, TMPDIR.to_s )
37
37
  # Set up Hoe plugins
38
38
  Hoe.plugin :mercurial
39
39
  Hoe.plugin :signing
40
+ Hoe.plugin :deveiate
40
41
 
41
42
  Hoe.plugins.delete :rubyforge
42
43
  Hoe.plugins.delete :compiler
@@ -55,7 +56,7 @@ $hoespec = Hoe.spec 'pg' do
55
56
  self.developer 'Michael Granger', 'ged@FaerieMUD.org'
56
57
 
57
58
  self.dependency 'rake-compiler', '~> 0.7', :developer
58
- self.dependency 'rspec', '~> 2.6', :developer
59
+ self.dependency 'hoe-deveiate', '~> 0.1', :developer
59
60
 
60
61
  self.spec_extras[:licenses] = ['BSD', 'Ruby', 'GPL']
61
62
  self.spec_extras[:extensions] = [ 'ext/extconf.rb' ]
@@ -64,6 +65,11 @@ $hoespec = Hoe.spec 'pg' do
64
65
 
65
66
  self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags= )
66
67
  self.check_history_on_release = true if self.respond_to?( :check_history_on_release= )
68
+ self.spec_extras[:rdoc_options] = [
69
+ '-f', 'fivefish',
70
+ '-t', 'pg: The Ruby Interface to PostgreSQL',
71
+ '-m', 'README.rdoc',
72
+ ]
67
73
 
68
74
  self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
69
75
  end
@@ -18,8 +18,8 @@ else
18
18
  end
19
19
 
20
20
  # Cross-compilation constants
21
- OPENSSL_VERSION = ENV['OPENSSL_VERSION'] || '1.0.0e'
22
- POSTGRESQL_VERSION = ENV['POSTGRESQL_VERSION'] || '9.1.1'
21
+ OPENSSL_VERSION = ENV['OPENSSL_VERSION'] || '1.0.1c'
22
+ POSTGRESQL_VERSION = ENV['POSTGRESQL_VERSION'] || '9.1.4'
23
23
 
24
24
  COMPILE_HOME = Pathname( "./build" ).expand_path
25
25
  STATIC_SOURCESDIR = COMPILE_HOME + 'sources'
@@ -36,7 +36,7 @@ OPENSSL_MAKEFILE = STATIC_OPENSSL_BUILDDIR + 'Makefile'
36
36
  LIBSSLEAY32 = STATIC_OPENSSL_BUILDDIR + 'libssleay32.a'
37
37
  LIBEAY32 = STATIC_OPENSSL_BUILDDIR + 'libeay32.a'
38
38
 
39
- OPENSSL_PATCHES = Rake::FileList[ MISCDIR + "openssl-#{OPENSSL_VERSION}.*.patch" ]
39
+ OPENSSL_PATCHES = Rake::FileList[ (MISCDIR + "openssl-#{OPENSSL_VERSION}.*.patch").to_s ]
40
40
 
41
41
  # Static PostgreSQL build vars
42
42
  STATIC_POSTGRESQL_BUILDDIR = STATIC_BUILDDIR + "postgresql-#{POSTGRESQL_VERSION}"
@@ -55,6 +55,7 @@ POSTGRESQL_GLOBAL_MAKEFILE = STATIC_POSTGRESQL_SRCDIR + 'Makefile.global'
55
55
  POSTGRESQL_SHLIB_MAKEFILE = STATIC_POSTGRESQL_SRCDIR + 'Makefile.shlib'
56
56
  POSTGRESQL_SHLIB_MF_ORIG = STATIC_POSTGRESQL_SRCDIR + 'Makefile.shlib.orig'
57
57
  POSTGRESQL_LIB = STATIC_POSTGRESQL_LIBDIR + 'libpq.a'
58
+ POSTGRESQL_PATCHES = Rake::FileList[ (MISCDIR + "postgresql-#{POSTGRESQL_VERSION}.*.patch").to_s ]
58
59
 
59
60
  CROSS_PREFIX = begin
60
61
  Rake::ExtensionCompiler.mingw_host
@@ -171,6 +172,12 @@ file STATIC_POSTGRESQL_BUILDDIR => POSTGRESQL_TARBALL do |t|
171
172
  STATIC_POSTGRESQL_BUILDDIR.mkpath
172
173
  run 'tar', '-xjf', POSTGRESQL_TARBALL.to_s, '-C', STATIC_POSTGRESQL_BUILDDIR.parent.to_s
173
174
  mv POSTGRESQL_SHLIB_MAKEFILE, POSTGRESQL_SHLIB_MF_ORIG
175
+
176
+ POSTGRESQL_PATCHES.each do |patchfile|
177
+ puts " applying patch #{patchfile}..."
178
+ run 'patch', '-Np1', '-d', STATIC_POSTGRESQL_BUILDDIR.to_s,
179
+ '-i', File.expand_path( patchfile, BASEDIR )
180
+ end
174
181
  end
175
182
 
176
183
  # generate the makefile in a clean build location
@@ -200,7 +207,7 @@ end
200
207
  # patch the Makefile.shlib -- depend on the build dir so it's only
201
208
  # rewritten if the tarball is re-extracted.
202
209
  file POSTGRESQL_SHLIB_MAKEFILE => POSTGRESQL_SHLIB_MF_ORIG do |t|
203
- tf = Tempfile.new( POSTGRESQL_SHLIB_MAKEFILE.basename )
210
+ tf = Tempfile.new( POSTGRESQL_SHLIB_MAKEFILE.basename.to_s )
204
211
  POSTGRESQL_SHLIB_MF_ORIG.open( File::RDONLY ) do |ifh|
205
212
  ifh.each_line do |line|
206
213
  tf.print( line.sub(/^(\s*haslibarule\s*=\s*yes)/, "# \\1 ") )
@@ -19,6 +19,7 @@ if ENV['CROSS_COMPILING']
19
19
  $LDFLAGS << " -L#{CONFIG['libdir']}"
20
20
 
21
21
  # Link against all required libraries for static build, if they are available
22
+ have_library( 'crypt32', 'CertOpenStore' ) && append_library( $libs, 'crypt32' )
22
23
  have_library( 'gdi32', 'CreateDC' ) && append_library( $libs, 'gdi32' )
23
24
  have_library( 'secur32' ) && append_library( $libs, 'secur32' )
24
25
  have_library( 'ws2_32', 'WSASocket') && append_library( $libs, 'ws2_32' )
@@ -55,15 +56,21 @@ have_func 'PQprepare'
55
56
  have_func 'PQexecParams'
56
57
  have_func 'PQescapeString'
57
58
  have_func 'PQescapeStringConn'
59
+ have_func 'PQescapeLiteral'
60
+ have_func 'PQescapeIdentifier'
58
61
  have_func 'PQgetCancel'
59
62
  have_func 'lo_create'
60
63
  have_func 'pg_encoding_to_char'
61
64
  have_func 'pg_char_to_encoding'
62
65
  have_func 'PQsetClientEncoding'
66
+ have_func 'PQlibVersion'
67
+ have_func 'PQping'
63
68
 
64
69
  have_func 'rb_encdb_alias'
65
70
  have_func 'rb_enc_alias'
66
71
 
72
+ have_const 'PGRES_COPY_BOTH', 'libpq-fe.h'
73
+
67
74
  $defs.push( "-DHAVE_ST_NOTIFY_EXTRA" ) if
68
75
  have_struct_member 'struct pgNotify', 'extra', 'libpq-fe.h'
69
76
 
data/ext/pg.c CHANGED
@@ -53,7 +53,7 @@ VALUE rb_mPGconstants;
53
53
 
54
54
 
55
55
  /*
56
- * Document-class: PGError
56
+ * Document-class: PG::Error
57
57
  *
58
58
  * This is the exception class raised when an error is returned from
59
59
  * a libpq API call.
@@ -250,6 +250,52 @@ pg_get_rb_encoding_as_pg_encoding( rb_encoding *enc )
250
250
  #endif /* M17N_SUPPORTED */
251
251
 
252
252
 
253
+ /**************************************************************************
254
+ * Module Methods
255
+ **************************************************************************/
256
+
257
+ #ifdef HAVE_PQLIBVERSION
258
+ /*
259
+ * call-seq:
260
+ * PG.library_version -> Integer
261
+ *
262
+ * Get the version of the libpq library in use. The number is formed by
263
+ * converting the major, minor, and revision numbers into two-decimal-
264
+ * digit numbers and appending them together.
265
+ * For example, version 7.4.2 will be returned as 70402, and version
266
+ * 8.1 will be returned as 80100 (leading zeroes are not shown). Zero
267
+ * is returned if the connection is bad.
268
+ */
269
+ static VALUE
270
+ pg_s_library_version(VALUE self)
271
+ {
272
+ UNUSED( self );
273
+ return INT2NUM(PQlibVersion());
274
+ }
275
+ #endif
276
+
277
+
278
+ /*
279
+ * call-seq:
280
+ * PG.isthreadsafe -> Boolean
281
+ * PG.is_threadsafe? -> Boolean
282
+ * PG.threadsafe? -> Boolean
283
+ *
284
+ * Returns +true+ if libpq is thread-safe, +false+ otherwise.
285
+ */
286
+ static VALUE
287
+ pg_s_threadsafe_p(VALUE self)
288
+ {
289
+ UNUSED( self );
290
+ return PQisthreadsafe() ? Qtrue : Qfalse;
291
+ }
292
+
293
+
294
+
295
+ /**************************************************************************
296
+ * Initializer
297
+ **************************************************************************/
298
+
253
299
  void
254
300
  Init_pg_ext()
255
301
  {
@@ -257,6 +303,16 @@ Init_pg_ext()
257
303
  rb_ePGerror = rb_define_class_under( rb_mPG, "Error", rb_eStandardError );
258
304
  rb_mPGconstants = rb_define_module_under( rb_mPG, "Constants" );
259
305
 
306
+ /*************************
307
+ * PG module methods
308
+ *************************/
309
+ #ifdef HAVE_PQLIBVERSION
310
+ rb_define_singleton_method( rb_mPG, "library_version", pg_s_library_version, 0 );
311
+ #endif
312
+ rb_define_singleton_method( rb_mPG, "isthreadsafe", pg_s_threadsafe_p, 0 );
313
+ SINGLETON_ALIAS( rb_mPG, "is_threadsafe?", "isthreadsafe" );
314
+ SINGLETON_ALIAS( rb_mPG, "threadsafe?", "isthreadsafe" );
315
+
260
316
  /*************************
261
317
  * PG::Error
262
318
  *************************/
@@ -285,6 +341,8 @@ Init_pg_ext()
285
341
  rb_define_const(rb_mPGconstants, "CONNECTION_SSL_STARTUP", INT2FIX(CONNECTION_SSL_STARTUP));
286
342
  /* Negotiating environment-driven parameter settings. */
287
343
  rb_define_const(rb_mPGconstants, "CONNECTION_SETENV", INT2FIX(CONNECTION_SETENV));
344
+ /* Internal state: connect() needed. */
345
+ rb_define_const(rb_mPGconstants, "CONNECTION_NEEDED", INT2FIX(CONNECTION_NEEDED));
288
346
 
289
347
  /****** PG::Connection CLASS CONSTANTS: Nonblocking connection polling status ******/
290
348
 
@@ -319,6 +377,19 @@ Init_pg_ext()
319
377
  /* Verbose error verbosity level (#set_error_verbosity) */
320
378
  rb_define_const(rb_mPGconstants, "PQERRORS_VERBOSE", INT2FIX(PQERRORS_VERBOSE));
321
379
 
380
+ #ifdef HAVE_PQPING
381
+ /****** PG::Connection CLASS CONSTANTS: Check Server Status ******/
382
+
383
+ /* Server is accepting connections. */
384
+ rb_define_const(rb_mPGconstants, "PQPING_OK", INT2FIX(PQPING_OK));
385
+ /* Server is alive but rejecting connections. */
386
+ rb_define_const(rb_mPGconstants, "PQPING_REJECT", INT2FIX(PQPING_REJECT));
387
+ /* Could not establish connection. */
388
+ rb_define_const(rb_mPGconstants, "PQPING_NO_RESPONSE", INT2FIX(PQPING_NO_RESPONSE));
389
+ /* Connection not attempted (bad params). */
390
+ rb_define_const(rb_mPGconstants, "PQPING_NO_ATTEMPT", INT2FIX(PQPING_NO_ATTEMPT));
391
+ #endif
392
+
322
393
  /****** PG::Connection CLASS CONSTANTS: Large Objects ******/
323
394
 
324
395
  /* Flag for #lo_creat, #lo_open -- open for writing */
@@ -332,7 +403,6 @@ Init_pg_ext()
332
403
  /* Flag for #lo_lseek -- seek from object end */
333
404
  rb_define_const(rb_mPGconstants, "SEEK_END", INT2FIX(SEEK_END));
334
405
 
335
-
336
406
  /****** PG::Result CONSTANTS: result status ******/
337
407
 
338
408
  /* #result_status constant: The string sent to the server was empty. */
@@ -352,6 +422,10 @@ Init_pg_ext()
352
422
  rb_define_const(rb_mPGconstants, "PGRES_NONFATAL_ERROR",INT2FIX(PGRES_NONFATAL_ERROR));
353
423
  /* #result_status constant: A fatal error occurred. */
354
424
  rb_define_const(rb_mPGconstants, "PGRES_FATAL_ERROR", INT2FIX(PGRES_FATAL_ERROR));
425
+ /* #result_status constant: Copy In/Out data transfer in progress. */
426
+ #ifdef HAVE_CONST_PGRES_COPY_BOTH
427
+ rb_define_const(rb_mPGconstants, "PGRES_COPY_BOTH", INT2FIX(PGRES_COPY_BOTH));
428
+ #endif
355
429
 
356
430
  /****** Result CONSTANTS: result error field codes ******/
357
431