pg 1.0.0 → 1.5.9
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/Gemfile +20 -0
- data/History.md +932 -0
- data/Manifest.txt +8 -3
- data/README-Windows.rdoc +4 -4
- data/README.ja.md +300 -0
- data/README.md +286 -0
- data/Rakefile +41 -138
- data/Rakefile.cross +71 -66
- data/certs/ged.pem +24 -0
- data/certs/kanis@comcard.de.pem +20 -0
- data/certs/larskanis-2022.pem +26 -0
- data/certs/larskanis-2023.pem +24 -0
- data/certs/larskanis-2024.pem +24 -0
- data/ext/errorcodes.def +84 -5
- data/ext/errorcodes.rb +1 -1
- data/ext/errorcodes.txt +23 -6
- data/ext/extconf.rb +109 -25
- data/ext/gvl_wrappers.c +4 -0
- data/ext/gvl_wrappers.h +23 -0
- data/ext/pg.c +213 -155
- data/ext/pg.h +89 -23
- data/ext/pg_binary_decoder.c +164 -16
- data/ext/pg_binary_encoder.c +238 -13
- data/ext/pg_coder.c +159 -35
- data/ext/pg_connection.c +1584 -967
- data/ext/pg_copy_coder.c +373 -43
- data/ext/pg_errors.c +1 -1
- data/ext/pg_record_coder.c +522 -0
- data/ext/pg_result.c +710 -217
- data/ext/pg_text_decoder.c +630 -43
- data/ext/pg_text_encoder.c +222 -72
- data/ext/pg_tuple.c +572 -0
- data/ext/pg_type_map.c +45 -11
- 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 +80 -37
- 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 +202 -0
- data/lib/pg/basic_type_map_for_results.rb +104 -0
- data/lib/pg/basic_type_registry.rb +311 -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 +769 -70
- data/lib/pg/exceptions.rb +22 -2
- data/lib/pg/result.rb +14 -2
- data/lib/pg/text_decoder/date.rb +21 -0
- data/lib/pg/text_decoder/inet.rb +9 -0
- data/lib/pg/text_decoder/json.rb +17 -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 +13 -0
- data/lib/pg/text_encoder/inet.rb +31 -0
- data/lib/pg/text_encoder/json.rb +17 -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 -39
- 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 +36 -0
- data/rakelib/task_extension.rb +46 -0
- data/sample/array_insert.rb +20 -0
- data/sample/async_api.rb +102 -0
- data/sample/async_copyto.rb +39 -0
- data/sample/async_mixed.rb +56 -0
- data/sample/check_conn.rb +21 -0
- data/sample/copydata.rb +71 -0
- data/sample/copyfrom.rb +81 -0
- data/sample/copyto.rb +19 -0
- data/sample/cursor.rb +21 -0
- data/sample/disk_usage_report.rb +177 -0
- data/sample/issue-119.rb +94 -0
- data/sample/losample.rb +69 -0
- data/sample/minimal-testcase.rb +17 -0
- data/sample/notify_wait.rb +72 -0
- data/sample/pg_statistics.rb +285 -0
- data/sample/replication_monitor.rb +222 -0
- data/sample/test_binary_values.rb +33 -0
- data/sample/wal_shipper.rb +434 -0
- data/sample/warehouse_partitions.rb +311 -0
- data.tar.gz.sig +0 -0
- metadata +138 -223
- metadata.gz.sig +0 -0
- data/.gemtest +0 -0
- data/ChangeLog +0 -6595
- data/History.rdoc +0 -422
- data/README.ja.rdoc +0 -14
- data/README.rdoc +0 -167
- data/lib/pg/basic_type_mapping.rb +0 -426
- data/lib/pg/constants.rb +0 -11
- data/lib/pg/text_decoder.rb +0 -51
- data/lib/pg/text_encoder.rb +0 -35
- data/spec/data/expected_trace.out +0 -26
- data/spec/data/random_binary_data +0 -0
- data/spec/helpers.rb +0 -348
- data/spec/pg/basic_type_mapping_spec.rb +0 -305
- data/spec/pg/connection_spec.rb +0 -1719
- data/spec/pg/result_spec.rb +0 -456
- 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 -777
- data/spec/pg_spec.rb +0 -50
data/ext/pg.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* pg.c - Toplevel extension
|
3
|
-
* $Id
|
3
|
+
* $Id$
|
4
4
|
*
|
5
5
|
* Author/s:
|
6
6
|
*
|
@@ -16,7 +16,7 @@
|
|
16
16
|
* See Contributors.rdoc for the many additional fine people that have contributed
|
17
17
|
* to this library over the years.
|
18
18
|
*
|
19
|
-
* Copyright (c) 1997-
|
19
|
+
* Copyright (c) 1997-2019 by the authors.
|
20
20
|
*
|
21
21
|
* You may redistribute this software under the same terms as Ruby itself; see
|
22
22
|
* https://www.ruby-lang.org/en/about/license.txt or the BSDL file in the source
|
@@ -33,7 +33,6 @@
|
|
33
33
|
*
|
34
34
|
* - PQfreemem -- unnecessary: copied to ruby object, then freed. Ruby object's
|
35
35
|
* memory is freed when it is garbage collected.
|
36
|
-
* - PQbinaryTuples -- better to use PQfformat
|
37
36
|
* - PQprint -- not very useful
|
38
37
|
* - PQsetdb -- not very useful
|
39
38
|
* - PQoidStatus -- deprecated, use PQoidValue
|
@@ -48,6 +47,7 @@
|
|
48
47
|
|
49
48
|
#include "pg.h"
|
50
49
|
|
50
|
+
int pg_skip_deprecation_warning;
|
51
51
|
VALUE rb_mPG;
|
52
52
|
VALUE rb_mPGconstants;
|
53
53
|
|
@@ -73,6 +73,7 @@ VALUE rb_mPGconstants;
|
|
73
73
|
* The mapping from canonical encoding names in PostgreSQL to ones in Ruby.
|
74
74
|
*/
|
75
75
|
const char * const (pg_enc_pg2ruby_mapping[][2]) = {
|
76
|
+
{"UTF8", "UTF-8" },
|
76
77
|
{"BIG5", "Big5" },
|
77
78
|
{"EUC_CN", "GB2312" },
|
78
79
|
{"EUC_JP", "EUC-JP" },
|
@@ -104,7 +105,6 @@ const char * const (pg_enc_pg2ruby_mapping[][2]) = {
|
|
104
105
|
{"SHIFT_JIS_2004","Windows-31J" },
|
105
106
|
/* {"SQL_ASCII", NULL }, special case*/
|
106
107
|
{"UHC", "CP949" },
|
107
|
-
{"UTF8", "UTF-8" },
|
108
108
|
{"WIN866", "IBM866" },
|
109
109
|
{"WIN874", "Windows-874" },
|
110
110
|
{"WIN1250", "Windows-1250"},
|
@@ -119,59 +119,17 @@ const char * const (pg_enc_pg2ruby_mapping[][2]) = {
|
|
119
119
|
};
|
120
120
|
|
121
121
|
|
122
|
-
/*
|
123
|
-
* A cache of mapping from PostgreSQL's encoding indices to Ruby's rb_encoding*s.
|
124
|
-
*/
|
125
|
-
static struct st_table *enc_pg2ruby;
|
126
|
-
|
127
|
-
|
128
|
-
/*
|
129
|
-
* Look up the JOHAB encoding, creating it as a dummy encoding if it's not
|
130
|
-
* already defined.
|
131
|
-
*/
|
132
|
-
static rb_encoding *
|
133
|
-
pg_find_or_create_johab(void)
|
134
|
-
{
|
135
|
-
static const char * const aliases[] = { "JOHAB", "Windows-1361", "CP1361" };
|
136
|
-
int enc_index;
|
137
|
-
size_t i;
|
138
|
-
|
139
|
-
for (i = 0; i < sizeof(aliases)/sizeof(aliases[0]); ++i) {
|
140
|
-
enc_index = rb_enc_find_index(aliases[i]);
|
141
|
-
if (enc_index > 0) return rb_enc_from_index(enc_index);
|
142
|
-
}
|
143
|
-
|
144
|
-
enc_index = rb_define_dummy_encoding(aliases[0]);
|
145
|
-
for (i = 1; i < sizeof(aliases)/sizeof(aliases[0]); ++i) {
|
146
|
-
rb_encdb_alias(aliases[i], aliases[0]);
|
147
|
-
}
|
148
|
-
return rb_enc_from_index(enc_index);
|
149
|
-
}
|
150
|
-
|
151
122
|
/*
|
152
123
|
* Return the given PostgreSQL encoding ID as an rb_encoding.
|
153
124
|
*
|
154
125
|
* - returns NULL if the client encoding is 'SQL_ASCII'.
|
155
126
|
* - returns ASCII-8BIT if the client encoding is unknown.
|
156
127
|
*/
|
157
|
-
rb_encoding *
|
128
|
+
static rb_encoding *
|
158
129
|
pg_get_pg_encoding_as_rb_encoding( int enc_id )
|
159
130
|
{
|
160
|
-
|
161
|
-
|
162
|
-
/* Use the cached value if it exists */
|
163
|
-
if ( st_lookup(enc_pg2ruby, (st_data_t)enc_id, (st_data_t*)&enc) ) {
|
164
|
-
return enc;
|
165
|
-
}
|
166
|
-
else {
|
167
|
-
const char *name = pg_encoding_to_char( enc_id );
|
168
|
-
|
169
|
-
enc = pg_get_pg_encname_as_rb_encoding( name );
|
170
|
-
st_insert( enc_pg2ruby, (st_data_t)enc_id, (st_data_t)enc );
|
171
|
-
|
172
|
-
return enc;
|
173
|
-
}
|
174
|
-
|
131
|
+
const char *name = pg_encoding_to_char( enc_id );
|
132
|
+
return pg_get_pg_encname_as_rb_encoding( name );
|
175
133
|
}
|
176
134
|
|
177
135
|
/*
|
@@ -188,10 +146,6 @@ pg_get_pg_encname_as_rb_encoding( const char *pg_encname )
|
|
188
146
|
return rb_enc_find( pg_enc_pg2ruby_mapping[i][1] );
|
189
147
|
}
|
190
148
|
|
191
|
-
/* JOHAB isn't a builtin encoding, so make up a dummy encoding if it's seen */
|
192
|
-
if ( strncmp(pg_encname, "JOHAB", 5) == 0 )
|
193
|
-
return pg_find_or_create_johab();
|
194
|
-
|
195
149
|
/* Fallthrough to ASCII-8BIT */
|
196
150
|
return rb_ascii8bit_encoding();
|
197
151
|
}
|
@@ -333,8 +287,7 @@ pg_to_bool_int(VALUE value)
|
|
333
287
|
* If your application initializes libssl and/or libcrypto libraries and libpq is
|
334
288
|
* built with SSL support, you should call PG.init_openssl() to tell libpq that the
|
335
289
|
* libssl and/or libcrypto libraries have been initialized by your application,
|
336
|
-
* so that libpq will not also initialize those libraries.
|
337
|
-
* http://h71000.www7.hp.com/doc/83final/BA554_90007/ch04.html for details on the SSL API.
|
290
|
+
* so that libpq will not also initialize those libraries.
|
338
291
|
*
|
339
292
|
* When do_ssl is +true+, libpq will initialize the OpenSSL library before first
|
340
293
|
* opening a database connection. When do_crypto is +true+, the libcrypto library
|
@@ -379,8 +332,20 @@ pg_s_init_ssl(VALUE self, VALUE do_ssl)
|
|
379
332
|
**************************************************************************/
|
380
333
|
|
381
334
|
void
|
382
|
-
Init_pg_ext()
|
335
|
+
Init_pg_ext(void)
|
383
336
|
{
|
337
|
+
|
338
|
+
#ifdef HAVE_RB_EXT_RACTOR_SAFE
|
339
|
+
rb_ext_ractor_safe(PQisthreadsafe());
|
340
|
+
#endif
|
341
|
+
|
342
|
+
if( RTEST(rb_eval_string("ENV['PG_SKIP_DEPRECATION_WARNING']")) ){
|
343
|
+
/* Set all bits to disable all deprecation warnings. */
|
344
|
+
pg_skip_deprecation_warning = 0xFFFF;
|
345
|
+
} else {
|
346
|
+
pg_skip_deprecation_warning = 0;
|
347
|
+
}
|
348
|
+
|
384
349
|
rb_mPG = rb_define_module( "PG" );
|
385
350
|
rb_mPGconstants = rb_define_module_under( rb_mPG, "Constants" );
|
386
351
|
|
@@ -392,8 +357,8 @@ Init_pg_ext()
|
|
392
357
|
SINGLETON_ALIAS( rb_mPG, "is_threadsafe?", "isthreadsafe" );
|
393
358
|
SINGLETON_ALIAS( rb_mPG, "threadsafe?", "isthreadsafe" );
|
394
359
|
|
395
|
-
|
396
|
-
|
360
|
+
rb_define_singleton_method( rb_mPG, "init_openssl", pg_s_init_openssl, 2 );
|
361
|
+
rb_define_singleton_method( rb_mPG, "init_ssl", pg_s_init_ssl, 1 );
|
397
362
|
|
398
363
|
|
399
364
|
/****** PG::Connection CLASS CONSTANTS: Connection Status ******/
|
@@ -411,14 +376,34 @@ Init_pg_ext()
|
|
411
376
|
rb_define_const(rb_mPGconstants, "CONNECTION_MADE", INT2FIX(CONNECTION_MADE));
|
412
377
|
/* Waiting for a response from the server. */
|
413
378
|
rb_define_const(rb_mPGconstants, "CONNECTION_AWAITING_RESPONSE", INT2FIX(CONNECTION_AWAITING_RESPONSE));
|
414
|
-
/* Received authentication; waiting for backend
|
379
|
+
/* Received authentication; waiting for backend startup. */
|
415
380
|
rb_define_const(rb_mPGconstants, "CONNECTION_AUTH_OK", INT2FIX(CONNECTION_AUTH_OK));
|
381
|
+
/* This state is no longer used. */
|
382
|
+
rb_define_const(rb_mPGconstants, "CONNECTION_SETENV", INT2FIX(CONNECTION_SETENV));
|
416
383
|
/* Negotiating SSL encryption. */
|
417
384
|
rb_define_const(rb_mPGconstants, "CONNECTION_SSL_STARTUP", INT2FIX(CONNECTION_SSL_STARTUP));
|
418
|
-
/*
|
419
|
-
rb_define_const(rb_mPGconstants, "CONNECTION_SETENV", INT2FIX(CONNECTION_SETENV));
|
420
|
-
/* Internal state: connect() needed. */
|
385
|
+
/* Internal state - PG.connect() needed. */
|
421
386
|
rb_define_const(rb_mPGconstants, "CONNECTION_NEEDED", INT2FIX(CONNECTION_NEEDED));
|
387
|
+
#if PG_MAJORVERSION_NUM >= 10
|
388
|
+
/* Checking if session is read-write. Available since PostgreSQL-10. */
|
389
|
+
rb_define_const(rb_mPGconstants, "CONNECTION_CHECK_WRITABLE", INT2FIX(CONNECTION_CHECK_WRITABLE));
|
390
|
+
#endif
|
391
|
+
#if PG_MAJORVERSION_NUM >= 10
|
392
|
+
/* Consuming any extra messages. Available since PostgreSQL-10. */
|
393
|
+
rb_define_const(rb_mPGconstants, "CONNECTION_CONSUME", INT2FIX(CONNECTION_CONSUME));
|
394
|
+
#endif
|
395
|
+
#if PG_MAJORVERSION_NUM >= 12
|
396
|
+
/* Negotiating GSSAPI. Available since PostgreSQL-12. */
|
397
|
+
rb_define_const(rb_mPGconstants, "CONNECTION_GSS_STARTUP", INT2FIX(CONNECTION_GSS_STARTUP));
|
398
|
+
#endif
|
399
|
+
#if PG_MAJORVERSION_NUM >= 13
|
400
|
+
/* Checking target server properties. Available since PostgreSQL-13. */
|
401
|
+
rb_define_const(rb_mPGconstants, "CONNECTION_CHECK_TARGET", INT2FIX(CONNECTION_CHECK_TARGET));
|
402
|
+
#endif
|
403
|
+
#if PG_MAJORVERSION_NUM >= 14
|
404
|
+
/* Checking if server is in standby mode. Available since PostgreSQL-14. */
|
405
|
+
rb_define_const(rb_mPGconstants, "CONNECTION_CHECK_STANDBY", INT2FIX(CONNECTION_CHECK_STANDBY));
|
406
|
+
#endif
|
422
407
|
|
423
408
|
/****** PG::Connection CLASS CONSTANTS: Nonblocking connection polling status ******/
|
424
409
|
|
@@ -433,26 +418,48 @@ Init_pg_ext()
|
|
433
418
|
|
434
419
|
/****** PG::Connection CLASS CONSTANTS: Transaction Status ******/
|
435
420
|
|
436
|
-
/* Transaction is currently idle (#transaction_status) */
|
421
|
+
/* Transaction is currently idle ( Connection#transaction_status ) */
|
437
422
|
rb_define_const(rb_mPGconstants, "PQTRANS_IDLE", INT2FIX(PQTRANS_IDLE));
|
438
|
-
/* Transaction is currently active; query has been sent to the server, but not yet completed. (#transaction_status) */
|
423
|
+
/* Transaction is currently active; query has been sent to the server, but not yet completed. ( Connection#transaction_status ) */
|
439
424
|
rb_define_const(rb_mPGconstants, "PQTRANS_ACTIVE", INT2FIX(PQTRANS_ACTIVE));
|
440
|
-
/* Transaction is currently idle, in a valid transaction block (#transaction_status) */
|
425
|
+
/* Transaction is currently idle, in a valid transaction block ( Connection#transaction_status ) */
|
441
426
|
rb_define_const(rb_mPGconstants, "PQTRANS_INTRANS", INT2FIX(PQTRANS_INTRANS));
|
442
|
-
/* Transaction is currently idle, in a failed transaction block (#transaction_status) */
|
427
|
+
/* Transaction is currently idle, in a failed transaction block ( Connection#transaction_status ) */
|
443
428
|
rb_define_const(rb_mPGconstants, "PQTRANS_INERROR", INT2FIX(PQTRANS_INERROR));
|
444
|
-
/* Transaction's connection is bad (#transaction_status) */
|
429
|
+
/* Transaction's connection is bad ( Connection#transaction_status ) */
|
445
430
|
rb_define_const(rb_mPGconstants, "PQTRANS_UNKNOWN", INT2FIX(PQTRANS_UNKNOWN));
|
446
431
|
|
447
432
|
/****** PG::Connection CLASS CONSTANTS: Error Verbosity ******/
|
448
433
|
|
449
|
-
/*
|
434
|
+
/* Error verbosity level ( Connection#set_error_verbosity ).
|
435
|
+
* In TERSE mode, returned messages include severity, primary text, and position only; this will normally fit on a single line. */
|
450
436
|
rb_define_const(rb_mPGconstants, "PQERRORS_TERSE", INT2FIX(PQERRORS_TERSE));
|
451
|
-
/*
|
437
|
+
/* Error verbosity level ( Connection#set_error_verbosity ).
|
438
|
+
* The DEFAULT mode produces messages that include the above plus any detail, hint, or context fields (these might span multiple lines). */
|
452
439
|
rb_define_const(rb_mPGconstants, "PQERRORS_DEFAULT", INT2FIX(PQERRORS_DEFAULT));
|
453
|
-
/*
|
440
|
+
/* Error verbosity level ( Connection#set_error_verbosity ).
|
441
|
+
* The VERBOSE mode includes all available fields. */
|
454
442
|
rb_define_const(rb_mPGconstants, "PQERRORS_VERBOSE", INT2FIX(PQERRORS_VERBOSE));
|
455
443
|
|
444
|
+
/* PQERRORS_SQLSTATE was introduced in PG-12 together with PQresultMemorySize() */
|
445
|
+
#ifdef HAVE_PQRESULTMEMORYSIZE
|
446
|
+
/* Error verbosity level ( Connection#set_error_verbosity ).
|
447
|
+
* The SQLSTATE mode includes only the error severity and the SQLSTATE error code, if one is available (if not, the output is like TERSE mode).
|
448
|
+
*
|
449
|
+
* Available since PostgreSQL-12.
|
450
|
+
*/
|
451
|
+
rb_define_const(rb_mPGconstants, "PQERRORS_SQLSTATE", INT2FIX(PQERRORS_SQLSTATE));
|
452
|
+
#endif
|
453
|
+
|
454
|
+
#ifdef HAVE_PQRESULTVERBOSEERRORMESSAGE
|
455
|
+
/* See Connection#set_error_context_visibility */
|
456
|
+
rb_define_const(rb_mPGconstants, "PQSHOW_CONTEXT_NEVER", INT2FIX(PQSHOW_CONTEXT_NEVER));
|
457
|
+
/* See Connection#set_error_context_visibility */
|
458
|
+
rb_define_const(rb_mPGconstants, "PQSHOW_CONTEXT_ERRORS", INT2FIX(PQSHOW_CONTEXT_ERRORS));
|
459
|
+
/* See Connection#set_error_context_visibility */
|
460
|
+
rb_define_const(rb_mPGconstants, "PQSHOW_CONTEXT_ALWAYS", INT2FIX(PQSHOW_CONTEXT_ALWAYS));
|
461
|
+
#endif
|
462
|
+
|
456
463
|
/****** PG::Connection CLASS CONSTANTS: Check Server Status ******/
|
457
464
|
|
458
465
|
/* Server is accepting connections. */
|
@@ -466,153 +473,203 @@ Init_pg_ext()
|
|
466
473
|
|
467
474
|
/****** PG::Connection CLASS CONSTANTS: Large Objects ******/
|
468
475
|
|
469
|
-
/* Flag for #lo_creat, #lo_open -- open for writing */
|
476
|
+
/* Flag for Connection#lo_creat, Connection#lo_open -- open for writing */
|
470
477
|
rb_define_const(rb_mPGconstants, "INV_WRITE", INT2FIX(INV_WRITE));
|
471
|
-
/* Flag for #lo_creat, #lo_open -- open for reading */
|
478
|
+
/* Flag for Connection#lo_creat, Connection#lo_open -- open for reading */
|
472
479
|
rb_define_const(rb_mPGconstants, "INV_READ", INT2FIX(INV_READ));
|
473
|
-
/* Flag for #lo_lseek -- seek from object start */
|
480
|
+
/* Flag for Connection#lo_lseek -- seek from object start */
|
474
481
|
rb_define_const(rb_mPGconstants, "SEEK_SET", INT2FIX(SEEK_SET));
|
475
|
-
/* Flag for #lo_lseek -- seek from current position */
|
482
|
+
/* Flag for Connection#lo_lseek -- seek from current position */
|
476
483
|
rb_define_const(rb_mPGconstants, "SEEK_CUR", INT2FIX(SEEK_CUR));
|
477
|
-
/* Flag for #lo_lseek -- seek from object end */
|
484
|
+
/* Flag for Connection#lo_lseek -- seek from object end */
|
478
485
|
rb_define_const(rb_mPGconstants, "SEEK_END", INT2FIX(SEEK_END));
|
479
486
|
|
480
487
|
/****** PG::Result CONSTANTS: result status ******/
|
481
488
|
|
482
|
-
/* #result_status constant
|
489
|
+
/* Result#result_status constant - The string sent to the server was empty. */
|
483
490
|
rb_define_const(rb_mPGconstants, "PGRES_EMPTY_QUERY", INT2FIX(PGRES_EMPTY_QUERY));
|
484
|
-
/* #result_status constant
|
491
|
+
/* Result#result_status constant - Successful completion of a command returning no data. */
|
485
492
|
rb_define_const(rb_mPGconstants, "PGRES_COMMAND_OK", INT2FIX(PGRES_COMMAND_OK));
|
486
|
-
|
487
|
-
(such as a SELECT or SHOW). */
|
493
|
+
/* Result#result_status constant - Successful completion of a command returning data (such as a SELECT or SHOW). */
|
488
494
|
rb_define_const(rb_mPGconstants, "PGRES_TUPLES_OK", INT2FIX(PGRES_TUPLES_OK));
|
489
|
-
/* #result_status constant
|
495
|
+
/* Result#result_status constant - Copy Out (from server) data transfer started. */
|
490
496
|
rb_define_const(rb_mPGconstants, "PGRES_COPY_OUT", INT2FIX(PGRES_COPY_OUT));
|
491
|
-
/* #result_status constant
|
497
|
+
/* Result#result_status constant - Copy In (to server) data transfer started. */
|
492
498
|
rb_define_const(rb_mPGconstants, "PGRES_COPY_IN", INT2FIX(PGRES_COPY_IN));
|
493
|
-
/* #result_status constant
|
499
|
+
/* Result#result_status constant - The server’s response was not understood. */
|
494
500
|
rb_define_const(rb_mPGconstants, "PGRES_BAD_RESPONSE", INT2FIX(PGRES_BAD_RESPONSE));
|
495
|
-
/* #result_status constant
|
501
|
+
/* Result#result_status constant - A nonfatal error (a notice or warning) occurred. */
|
496
502
|
rb_define_const(rb_mPGconstants, "PGRES_NONFATAL_ERROR",INT2FIX(PGRES_NONFATAL_ERROR));
|
497
|
-
/* #result_status constant
|
503
|
+
/* Result#result_status constant - A fatal error occurred. */
|
498
504
|
rb_define_const(rb_mPGconstants, "PGRES_FATAL_ERROR", INT2FIX(PGRES_FATAL_ERROR));
|
499
|
-
/* #result_status constant
|
505
|
+
/* Result#result_status constant - Copy In/Out data transfer in progress. */
|
500
506
|
rb_define_const(rb_mPGconstants, "PGRES_COPY_BOTH", INT2FIX(PGRES_COPY_BOTH));
|
501
|
-
/* #result_status constant
|
507
|
+
/* Result#result_status constant - Single tuple from larger resultset. */
|
502
508
|
rb_define_const(rb_mPGconstants, "PGRES_SINGLE_TUPLE", INT2FIX(PGRES_SINGLE_TUPLE));
|
503
509
|
|
510
|
+
#ifdef HAVE_PQENTERPIPELINEMODE
|
511
|
+
/* Result#result_status constant - The PG::Result represents a synchronization point in pipeline mode, requested by Connection#pipeline_sync.
|
512
|
+
*
|
513
|
+
* This status occurs only when pipeline mode has been selected. */
|
514
|
+
rb_define_const(rb_mPGconstants, "PGRES_PIPELINE_SYNC", INT2FIX(PGRES_PIPELINE_SYNC));
|
515
|
+
|
516
|
+
/* Result#result_status constant - The PG::Result represents a pipeline that has received an error from the server.
|
517
|
+
*
|
518
|
+
* Connection#get_result must be called repeatedly, and each time it will return this status code until the end of the current pipeline, at which point it will return PG::PGRES_PIPELINE_SYNC and normal processing can resume.
|
519
|
+
*/
|
520
|
+
rb_define_const(rb_mPGconstants, "PGRES_PIPELINE_ABORTED", INT2FIX(PGRES_PIPELINE_ABORTED));
|
521
|
+
#endif
|
522
|
+
|
504
523
|
/****** Result CONSTANTS: result error field codes ******/
|
505
524
|
|
506
|
-
/* #result_error_field argument constant
|
507
|
-
*
|
508
|
-
* DEBUG, INFO, or LOG (in a notice message), or a localized translation
|
509
|
-
* of one of these.
|
525
|
+
/* Result#result_error_field argument constant
|
526
|
+
*
|
527
|
+
* The severity; the field contents are ERROR, FATAL, or PANIC (in an error message), or WARNING, NOTICE, DEBUG, INFO, or LOG (in a notice message), or a localized translation
|
528
|
+
* of one of these.
|
529
|
+
* Always present.
|
510
530
|
*/
|
511
531
|
rb_define_const(rb_mPGconstants, "PG_DIAG_SEVERITY", INT2FIX(PG_DIAG_SEVERITY));
|
512
532
|
|
513
|
-
|
514
|
-
|
515
|
-
*
|
516
|
-
*
|
517
|
-
*
|
518
|
-
*
|
533
|
+
#ifdef PG_DIAG_SEVERITY_NONLOCALIZED
|
534
|
+
/* Result#result_error_field argument constant
|
535
|
+
*
|
536
|
+
* The severity; the field contents are ERROR, FATAL, or PANIC (in an error message), or WARNING, NOTICE, DEBUG, INFO, or LOG (in a notice message).
|
537
|
+
* This is identical to the PG_DIAG_SEVERITY field except that the contents are never localized.
|
538
|
+
*
|
539
|
+
* Available since PostgreSQL-9.6
|
540
|
+
*/
|
541
|
+
rb_define_const(rb_mPGconstants, "PG_DIAG_SEVERITY_NONLOCALIZED", INT2FIX(PG_DIAG_SEVERITY_NONLOCALIZED));
|
542
|
+
#endif
|
543
|
+
/* Result#result_error_field argument constant
|
544
|
+
*
|
545
|
+
* The SQLSTATE code for the error.
|
546
|
+
* The SQLSTATE code identifies the type of error that has occurred; it can be used by front-end applications to perform specific operations (such as error handling) in response to a particular database error.
|
547
|
+
* For a list of the possible SQLSTATE codes, see Appendix A.
|
548
|
+
* This field is not localizable, and is always present.
|
519
549
|
*/
|
520
550
|
rb_define_const(rb_mPGconstants, "PG_DIAG_SQLSTATE", INT2FIX(PG_DIAG_SQLSTATE));
|
521
|
-
|
522
|
-
|
523
|
-
* error message (typically one line).
|
551
|
+
/* Result#result_error_field argument constant
|
552
|
+
*
|
553
|
+
* The primary human-readable error message (typically one line).
|
554
|
+
* Always present. */
|
524
555
|
rb_define_const(rb_mPGconstants, "PG_DIAG_MESSAGE_PRIMARY", INT2FIX(PG_DIAG_MESSAGE_PRIMARY));
|
525
|
-
|
526
|
-
|
527
|
-
* error message carrying more detail about the problem.
|
528
|
-
* multiple lines.
|
556
|
+
/* Result#result_error_field argument constant
|
557
|
+
*
|
558
|
+
* Detail: an optional secondary error message carrying more detail about the problem.
|
559
|
+
* Might run to multiple lines.
|
529
560
|
*/
|
530
561
|
rb_define_const(rb_mPGconstants, "PG_DIAG_MESSAGE_DETAIL", INT2FIX(PG_DIAG_MESSAGE_DETAIL));
|
531
|
-
|
532
|
-
|
533
|
-
* what to do about the problem.
|
534
|
-
* in that it offers advice (potentially inappropriate) rather than
|
535
|
-
*
|
562
|
+
/* Result#result_error_field argument constant
|
563
|
+
*
|
564
|
+
* Hint: an optional suggestion what to do about the problem.
|
565
|
+
* This is intended to differ from detail in that it offers advice (potentially inappropriate) rather than hard facts.
|
566
|
+
* Might run to multiple lines.
|
536
567
|
*/
|
537
|
-
|
538
568
|
rb_define_const(rb_mPGconstants, "PG_DIAG_MESSAGE_HINT", INT2FIX(PG_DIAG_MESSAGE_HINT));
|
539
|
-
/* #result_error_field argument constant
|
540
|
-
*
|
541
|
-
*
|
542
|
-
*
|
569
|
+
/* Result#result_error_field argument constant
|
570
|
+
*
|
571
|
+
* A string containing a decimal integer indicating an error cursor position as an index into the original statement string.
|
572
|
+
*
|
573
|
+
* The first character has index 1, and positions are measured in characters not bytes.
|
543
574
|
*/
|
544
|
-
|
545
575
|
rb_define_const(rb_mPGconstants, "PG_DIAG_STATEMENT_POSITION", INT2FIX(PG_DIAG_STATEMENT_POSITION));
|
546
|
-
/* #result_error_field argument constant
|
547
|
-
*
|
548
|
-
* position refers to an internally generated command rather than the
|
549
|
-
*
|
550
|
-
* always appear when this eld appears.
|
576
|
+
/* Result#result_error_field argument constant
|
577
|
+
*
|
578
|
+
* This is defined the same as the PG_DIAG_STATEMENT_POSITION field, but it is used when the cursor position refers to an internally generated command rather than the one submitted by the client.
|
579
|
+
* The PG_DIAG_INTERNAL_QUERY field will always appear when this field appears.
|
551
580
|
*/
|
552
|
-
|
553
581
|
rb_define_const(rb_mPGconstants, "PG_DIAG_INTERNAL_POSITION", INT2FIX(PG_DIAG_INTERNAL_POSITION));
|
554
|
-
/* #result_error_field argument constant
|
555
|
-
*
|
556
|
-
*
|
582
|
+
/* Result#result_error_field argument constant
|
583
|
+
*
|
584
|
+
* The text of a failed internally-generated command.
|
585
|
+
* This could be, for example, a SQL query issued by a PL/pgSQL function.
|
557
586
|
*/
|
558
|
-
|
559
587
|
rb_define_const(rb_mPGconstants, "PG_DIAG_INTERNAL_QUERY", INT2FIX(PG_DIAG_INTERNAL_QUERY));
|
560
|
-
/* #result_error_field argument constant
|
561
|
-
*
|
562
|
-
*
|
563
|
-
*
|
588
|
+
/* Result#result_error_field argument constant
|
589
|
+
*
|
590
|
+
* An indication of the context in which the error occurred.
|
591
|
+
* Presently this includes a call stack traceback of active procedural language functions and internally-generated queries.
|
592
|
+
* The trace is one entry per line, most recent first.
|
564
593
|
*/
|
565
|
-
|
566
594
|
rb_define_const(rb_mPGconstants, "PG_DIAG_CONTEXT", INT2FIX(PG_DIAG_CONTEXT));
|
567
|
-
/* #result_error_field argument constant
|
568
|
-
*
|
595
|
+
/* Result#result_error_field argument constant
|
596
|
+
*
|
597
|
+
* The file name of the source-code location where the error was reported. */
|
569
598
|
rb_define_const(rb_mPGconstants, "PG_DIAG_SOURCE_FILE", INT2FIX(PG_DIAG_SOURCE_FILE));
|
570
599
|
|
571
|
-
/* #result_error_field argument constant
|
572
|
-
*
|
600
|
+
/* Result#result_error_field argument constant
|
601
|
+
*
|
602
|
+
* The line number of the source-code location where the error was reported. */
|
573
603
|
rb_define_const(rb_mPGconstants, "PG_DIAG_SOURCE_LINE", INT2FIX(PG_DIAG_SOURCE_LINE));
|
574
604
|
|
575
|
-
/* #result_error_field argument constant
|
576
|
-
*
|
605
|
+
/* Result#result_error_field argument constant
|
606
|
+
*
|
607
|
+
* The name of the source-code function reporting the error. */
|
577
608
|
rb_define_const(rb_mPGconstants, "PG_DIAG_SOURCE_FUNCTION", INT2FIX(PG_DIAG_SOURCE_FUNCTION));
|
578
609
|
|
579
|
-
#ifdef
|
580
|
-
/* #result_error_field argument constant
|
581
|
-
*
|
610
|
+
#ifdef PG_DIAG_TABLE_NAME
|
611
|
+
/* Result#result_error_field argument constant
|
612
|
+
*
|
613
|
+
* If the error was associated with a specific database object, the name of the schema containing that object, if any. */
|
582
614
|
rb_define_const(rb_mPGconstants, "PG_DIAG_SCHEMA_NAME", INT2FIX(PG_DIAG_SCHEMA_NAME));
|
583
615
|
|
584
|
-
/* #result_error_field argument constant
|
585
|
-
*
|
586
|
-
*
|
616
|
+
/* Result#result_error_field argument constant
|
617
|
+
*
|
618
|
+
* If the error was associated with a specific table, the name of the table.
|
619
|
+
* (When this field is present, the schema name field provides the name of the table's schema.) */
|
587
620
|
rb_define_const(rb_mPGconstants, "PG_DIAG_TABLE_NAME", INT2FIX(PG_DIAG_TABLE_NAME));
|
588
621
|
|
589
|
-
/* #result_error_field argument constant
|
590
|
-
*
|
591
|
-
*
|
622
|
+
/* Result#result_error_field argument constant
|
623
|
+
*
|
624
|
+
* If the error was associated with a specific table column, the name of the column.
|
625
|
+
* (When this field is present, the schema and table name fields identify the table.) */
|
592
626
|
rb_define_const(rb_mPGconstants, "PG_DIAG_COLUMN_NAME", INT2FIX(PG_DIAG_COLUMN_NAME));
|
593
627
|
|
594
|
-
/* #result_error_field argument constant
|
595
|
-
*
|
596
|
-
*
|
628
|
+
/* Result#result_error_field argument constant
|
629
|
+
*
|
630
|
+
* If the error was associated with a specific datatype, the name of the datatype.
|
631
|
+
* (When this field is present, the schema name field provides the name of the datatype's schema.) */
|
597
632
|
rb_define_const(rb_mPGconstants, "PG_DIAG_DATATYPE_NAME", INT2FIX(PG_DIAG_DATATYPE_NAME));
|
598
633
|
|
599
|
-
/* #result_error_field argument constant
|
600
|
-
*
|
601
|
-
*
|
602
|
-
*
|
603
|
-
* constraint syntax.) */
|
634
|
+
/* Result#result_error_field argument constant
|
635
|
+
*
|
636
|
+
* If the error was associated with a specific constraint, the name of the constraint.
|
637
|
+
* The table or domain that the constraint belongs to is reported using the fields listed above.
|
638
|
+
* (For this purpose, indexes are treated as constraints, even if they weren't created with constraint syntax.) */
|
604
639
|
rb_define_const(rb_mPGconstants, "PG_DIAG_CONSTRAINT_NAME", INT2FIX(PG_DIAG_CONSTRAINT_NAME));
|
605
640
|
#endif
|
606
641
|
|
642
|
+
#ifdef HAVE_PQENTERPIPELINEMODE
|
643
|
+
/* Connection#pipeline_status constant
|
644
|
+
*
|
645
|
+
* The libpq connection is in pipeline mode.
|
646
|
+
*/
|
647
|
+
rb_define_const(rb_mPGconstants, "PQ_PIPELINE_ON", INT2FIX(PQ_PIPELINE_ON));
|
648
|
+
|
649
|
+
/* Connection#pipeline_status constant
|
650
|
+
*
|
651
|
+
* The libpq connection is not in pipeline mode.
|
652
|
+
*/
|
653
|
+
rb_define_const(rb_mPGconstants, "PQ_PIPELINE_OFF", INT2FIX(PQ_PIPELINE_OFF));
|
654
|
+
|
655
|
+
/* Connection#pipeline_status constant
|
656
|
+
*
|
657
|
+
* The libpq connection is in pipeline mode and an error occurred while processing the current pipeline.
|
658
|
+
* The aborted flag is cleared when PQgetResult returns a result of type PGRES_PIPELINE_SYNC.
|
659
|
+
*/
|
660
|
+
rb_define_const(rb_mPGconstants, "PQ_PIPELINE_ABORTED", INT2FIX(PQ_PIPELINE_ABORTED));
|
661
|
+
#endif
|
662
|
+
|
607
663
|
/* Invalid OID constant */
|
608
664
|
rb_define_const(rb_mPGconstants, "INVALID_OID", INT2FIX(InvalidOid));
|
609
665
|
rb_define_const(rb_mPGconstants, "InvalidOid", INT2FIX(InvalidOid));
|
610
666
|
|
667
|
+
/* PostgreSQL compiled in default port */
|
668
|
+
rb_define_const(rb_mPGconstants, "DEF_PGPORT", INT2FIX(DEF_PGPORT));
|
669
|
+
|
611
670
|
/* Add the constants to the toplevel namespace */
|
612
671
|
rb_include_module( rb_mPG, rb_mPGconstants );
|
613
672
|
|
614
|
-
enc_pg2ruby = st_init_numtable();
|
615
|
-
|
616
673
|
/* Initialize the main extension classes */
|
617
674
|
init_pg_connection();
|
618
675
|
init_pg_result();
|
@@ -630,5 +687,6 @@ Init_pg_ext()
|
|
630
687
|
init_pg_binary_encoder();
|
631
688
|
init_pg_binary_decoder();
|
632
689
|
init_pg_copycoder();
|
690
|
+
init_pg_recordcoder();
|
691
|
+
init_pg_tuple();
|
633
692
|
}
|
634
|
-
|