pg 0.18.2 → 1.4.5
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 +36 -0
- data/.gems +6 -0
- data/.github/workflows/binary-gems.yml +86 -0
- data/.github/workflows/source-gem.yml +131 -0
- data/.gitignore +13 -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.rdoc +480 -4
- data/Manifest.txt +8 -21
- data/README-Windows.rdoc +17 -28
- data/README.ja.rdoc +1 -2
- data/README.rdoc +92 -20
- data/Rakefile +33 -133
- data/Rakefile.cross +89 -67
- data/certs/ged.pem +24 -0
- data/certs/larskanis-2022.pem +26 -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 +216 -172
- data/ext/pg.h +93 -98
- data/ext/pg_binary_decoder.c +85 -16
- data/ext/pg_binary_encoder.c +25 -22
- data/ext/pg_coder.c +176 -40
- data/ext/pg_connection.c +1735 -1138
- data/ext/pg_copy_coder.c +95 -28
- data/ext/pg_errors.c +1 -1
- data/ext/pg_record_coder.c +521 -0
- data/ext/pg_result.c +642 -221
- data/ext/pg_text_decoder.c +609 -41
- data/ext/pg_text_encoder.c +254 -100
- data/ext/pg_tuple.c +569 -0
- data/ext/pg_type_map.c +62 -22
- data/ext/pg_type_map_all_strings.c +20 -6
- data/ext/pg_type_map_by_class.c +55 -25
- data/ext/pg_type_map_by_column.c +81 -42
- data/ext/pg_type_map_by_mri_type.c +49 -20
- data/ext/pg_type_map_by_oid.c +56 -26
- data/ext/pg_type_map_in_ruby.c +52 -21
- 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 +47 -0
- data/lib/pg/basic_type_map_for_queries.rb +193 -0
- data/lib/pg/basic_type_map_for_results.rb +81 -0
- data/lib/pg/basic_type_registry.rb +301 -0
- data/lib/pg/binary_decoder.rb +23 -0
- data/lib/pg/coder.rb +24 -3
- data/lib/pg/connection.rb +711 -64
- data/lib/pg/constants.rb +2 -1
- data/lib/pg/exceptions.rb +9 -2
- data/lib/pg/result.rb +24 -7
- data/lib/pg/text_decoder.rb +27 -23
- data/lib/pg/text_encoder.rb +40 -8
- 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 +61 -36
- 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 +32 -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.tar.gz.sig +0 -0
- metadata +74 -216
- metadata.gz.sig +0 -0
- data/ChangeLog +0 -5545
- data/lib/pg/basic_type_mapping.rb +0 -399
- 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/ext/extconf.rb
CHANGED
|
@@ -15,6 +15,13 @@ if pgdir = with_config( 'pg' )
|
|
|
15
15
|
ENV['PATH'] = "#{pgdir}/bin" + File::PATH_SEPARATOR + ENV['PATH']
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
if enable_config("gvl-unlock", true)
|
|
19
|
+
$defs.push( "-DENABLE_GVL_UNLOCK" )
|
|
20
|
+
$stderr.puts "Calling libpq with GVL unlocked"
|
|
21
|
+
else
|
|
22
|
+
$stderr.puts "Calling libpq with GVL locked"
|
|
23
|
+
end
|
|
24
|
+
|
|
18
25
|
if enable_config("windows-cross")
|
|
19
26
|
# Avoid dependency to external libgcc.dll on x86-mingw32
|
|
20
27
|
$LDFLAGS << " -static-libgcc"
|
|
@@ -24,75 +31,134 @@ if enable_config("windows-cross")
|
|
|
24
31
|
else
|
|
25
32
|
# Native build
|
|
26
33
|
|
|
27
|
-
|
|
34
|
+
pgconfig = with_config('pg-config') ||
|
|
35
|
+
with_config('pg_config') ||
|
|
36
|
+
find_executable('pg_config')
|
|
37
|
+
|
|
38
|
+
if pgconfig && pgconfig != 'ignore'
|
|
28
39
|
$stderr.puts "Using config values from %s" % [ pgconfig ]
|
|
29
|
-
incdir =
|
|
30
|
-
libdir =
|
|
40
|
+
incdir = IO.popen([pgconfig, "--includedir"], &:read).chomp
|
|
41
|
+
libdir = IO.popen([pgconfig, "--libdir"], &:read).chomp
|
|
31
42
|
dir_config 'pg', incdir, libdir
|
|
32
43
|
|
|
33
|
-
#
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
44
|
+
# Windows traditionally stores DLLs beside executables, not in libdir
|
|
45
|
+
dlldir = RUBY_PLATFORM=~/mingw|mswin/ ? IO.popen([pgconfig, "--bindir"], &:read).chomp : libdir
|
|
46
|
+
|
|
47
|
+
elsif checking_for "libpq per pkg-config" do
|
|
48
|
+
_cflags, ldflags, _libs = pkg_config("libpq")
|
|
49
|
+
dlldir = ldflags && ldflags[/-L([^ ]+)/] && $1
|
|
38
50
|
end
|
|
51
|
+
|
|
39
52
|
else
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
53
|
+
incdir, libdir = dir_config 'pg'
|
|
54
|
+
dlldir = libdir
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Try to use runtime path linker option, even if RbConfig doesn't know about it.
|
|
58
|
+
# The rpath option is usually set implicit by dir_config(), but so far not
|
|
59
|
+
# on MacOS-X.
|
|
60
|
+
if dlldir && RbConfig::CONFIG["RPATHFLAG"].to_s.empty?
|
|
61
|
+
append_ldflags "-Wl,-rpath,#{dlldir.quote}"
|
|
43
62
|
end
|
|
44
63
|
end
|
|
45
64
|
|
|
65
|
+
$stderr.puts "Using libpq from #{dlldir}"
|
|
46
66
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
67
|
+
File.write("postgresql_lib_path.rb", <<-EOT)
|
|
68
|
+
module PG
|
|
69
|
+
POSTGRESQL_LIB_PATH = #{dlldir.inspect}
|
|
70
|
+
end
|
|
71
|
+
EOT
|
|
72
|
+
$INSTALLFILES = {
|
|
73
|
+
"./postgresql_lib_path.rb" => "$(RUBYLIBDIR)/pg/"
|
|
74
|
+
}
|
|
50
75
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
have_library( 'ms/libpq', 'PQconnectdb', ['libpq-fe.h'] )
|
|
76
|
+
if RUBY_VERSION >= '2.3.0' && /solaris/ =~ RUBY_PLATFORM
|
|
77
|
+
append_cppflags( '-D__EXTENSIONS__' )
|
|
78
|
+
end
|
|
55
79
|
|
|
56
|
-
|
|
57
|
-
|
|
80
|
+
begin
|
|
81
|
+
find_header( 'libpq-fe.h' ) or abort "Can't find the 'libpq-fe.h header"
|
|
82
|
+
find_header( 'libpq/libpq-fs.h' ) or abort "Can't find the 'libpq/libpq-fs.h header"
|
|
83
|
+
find_header( 'pg_config_manual.h' ) or abort "Can't find the 'pg_config_manual.h' header"
|
|
84
|
+
|
|
85
|
+
abort "Can't find the PostgreSQL client library (libpq)" unless
|
|
86
|
+
have_library( 'pq', 'PQconnectdb', ['libpq-fe.h'] ) ||
|
|
87
|
+
have_library( 'libpq', 'PQconnectdb', ['libpq-fe.h'] ) ||
|
|
88
|
+
have_library( 'ms/libpq', 'PQconnectdb', ['libpq-fe.h'] )
|
|
89
|
+
|
|
90
|
+
rescue SystemExit
|
|
91
|
+
install_text = case RUBY_PLATFORM
|
|
92
|
+
when /linux/
|
|
93
|
+
<<-EOT
|
|
94
|
+
Please install libpq or postgresql client package like so:
|
|
95
|
+
sudo apt install libpq-dev
|
|
96
|
+
sudo yum install postgresql-devel
|
|
97
|
+
sudo zypper in postgresql-devel
|
|
98
|
+
sudo pacman -S postgresql-libs
|
|
99
|
+
EOT
|
|
100
|
+
when /darwin/
|
|
101
|
+
<<-EOT
|
|
102
|
+
Please install libpq or postgresql client package like so:
|
|
103
|
+
brew install libpq
|
|
104
|
+
EOT
|
|
105
|
+
when /mingw/
|
|
106
|
+
<<-EOT
|
|
107
|
+
Please install libpq or postgresql client package like so:
|
|
108
|
+
ridk exec sh -c "pacman -S ${MINGW_PACKAGE_PREFIX}-postgresql"
|
|
109
|
+
EOT
|
|
110
|
+
else
|
|
111
|
+
<<-EOT
|
|
112
|
+
Please install libpq or postgresql client package.
|
|
113
|
+
EOT
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
$stderr.puts <<-EOT
|
|
117
|
+
*****************************************************************************
|
|
118
|
+
|
|
119
|
+
Unable to find PostgreSQL client library.
|
|
120
|
+
|
|
121
|
+
#{install_text}
|
|
122
|
+
or try again with:
|
|
123
|
+
gem install pg -- --with-pg-config=/path/to/pg_config
|
|
124
|
+
|
|
125
|
+
or set library paths manually with:
|
|
126
|
+
gem install pg -- --with-pg-include=/path/to/libpq-fe.h/ --with-pg-lib=/path/to/libpq.so/
|
|
127
|
+
|
|
128
|
+
EOT
|
|
129
|
+
raise
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
if /mingw/ =~ RUBY_PLATFORM && RbConfig::MAKEFILE_CONFIG['CC'] =~ /gcc/
|
|
133
|
+
# Work around: https://sourceware.org/bugzilla/show_bug.cgi?id=22504
|
|
134
|
+
checking_for "workaround gcc version with link issue" do
|
|
135
|
+
`#{RbConfig::MAKEFILE_CONFIG['CC']} --version`.chomp =~ /\s(\d+)\.\d+\.\d+(\s|$)/ &&
|
|
136
|
+
$1.to_i >= 6 &&
|
|
137
|
+
have_library(':libpq.lib') # Prefer linking to libpq.lib over libpq.dll if available
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
have_func 'PQconninfo', 'libpq-fe.h' or
|
|
58
142
|
abort "Your PostgreSQL is too old. Either install an older version " +
|
|
59
|
-
"of this gem or upgrade your database."
|
|
60
|
-
|
|
61
|
-
have_func '
|
|
62
|
-
have_func '
|
|
63
|
-
have_func '
|
|
64
|
-
have_func '
|
|
65
|
-
have_func '
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
have_func '
|
|
70
|
-
have_func '
|
|
71
|
-
have_func '
|
|
72
|
-
have_func '
|
|
73
|
-
have_func 'PQping'
|
|
74
|
-
have_func 'PQsetSingleRowMode'
|
|
75
|
-
have_func 'PQconninfo'
|
|
76
|
-
|
|
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
|
-
have_const 'PG_DIAG_TABLE_NAME', 'libpq-fe.h'
|
|
89
|
-
|
|
90
|
-
$defs.push( "-DHAVE_ST_NOTIFY_EXTRA" ) if
|
|
91
|
-
have_struct_member 'struct pgNotify', 'extra', 'libpq-fe.h'
|
|
143
|
+
"of this gem or upgrade your database to at least PostgreSQL-9.3."
|
|
144
|
+
# optional headers/functions
|
|
145
|
+
have_func 'PQsslAttribute', 'libpq-fe.h' # since PostgreSQL-9.5
|
|
146
|
+
have_func 'PQresultVerboseErrorMessage', 'libpq-fe.h' # since PostgreSQL-9.6
|
|
147
|
+
have_func 'PQencryptPasswordConn', 'libpq-fe.h' # since PostgreSQL-10
|
|
148
|
+
have_func 'PQresultMemorySize', 'libpq-fe.h' # since PostgreSQL-12
|
|
149
|
+
have_func 'PQenterPipelineMode', 'libpq-fe.h' do |src| # since PostgreSQL-14
|
|
150
|
+
# Ensure header files fit as well
|
|
151
|
+
src + " int con(){ return PGRES_PIPELINE_SYNC; }"
|
|
152
|
+
end
|
|
153
|
+
have_func 'timegm'
|
|
154
|
+
have_func 'rb_gc_adjust_memory_usage' # since ruby-2.4
|
|
155
|
+
have_func 'rb_gc_mark_movable' # since ruby-2.7
|
|
156
|
+
have_func 'rb_io_wait' # since ruby-3.0
|
|
92
157
|
|
|
93
158
|
# unistd.h confilicts with ruby/win32.h when cross compiling for win32 and ruby 1.9.1
|
|
94
159
|
have_header 'unistd.h'
|
|
95
|
-
have_header '
|
|
160
|
+
have_header 'inttypes.h'
|
|
161
|
+
have_header('ruby/fiber/scheduler.h') if RUBY_PLATFORM=~/mingw|mswin/
|
|
96
162
|
|
|
97
163
|
checking_for "C99 variable length arrays" do
|
|
98
164
|
$defs.push( "-DHAVE_VARIABLE_LENGTH_ARRAYS" ) if try_compile('void test_vla(int l){ int vla[l]; }')
|
data/ext/gvl_wrappers.c
CHANGED
|
@@ -5,9 +5,17 @@
|
|
|
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
|
+
|
|
12
|
+
#ifdef ENABLE_GVL_UNLOCK
|
|
8
13
|
FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_WRAPPER_STRUCT );
|
|
9
14
|
FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_SKELETON );
|
|
15
|
+
#endif
|
|
10
16
|
FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB );
|
|
17
|
+
#ifdef ENABLE_GVL_UNLOCK
|
|
11
18
|
FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVL_WRAPPER_STRUCT );
|
|
12
19
|
FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVLCB_SKELETON );
|
|
20
|
+
#endif
|
|
13
21
|
FOR_EACH_CALLBACK_FUNCTION( DEFINE_GVLCB_STUB );
|
data/ext/gvl_wrappers.h
CHANGED
|
@@ -15,13 +15,10 @@
|
|
|
15
15
|
#ifndef __gvl_wrappers_h
|
|
16
16
|
#define __gvl_wrappers_h
|
|
17
17
|
|
|
18
|
-
#
|
|
19
|
-
extern void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1);
|
|
20
|
-
#endif
|
|
18
|
+
#include <ruby/thread.h>
|
|
21
19
|
|
|
22
|
-
#
|
|
23
|
-
|
|
24
|
-
rb_unblock_function_t *ubf, void *data2);
|
|
20
|
+
#ifdef RUBY_EXTCONF_H
|
|
21
|
+
# include RUBY_EXTCONF_H
|
|
25
22
|
#endif
|
|
26
23
|
|
|
27
24
|
#define DEFINE_PARAM_LIST1(type, name) \
|
|
@@ -53,20 +50,21 @@ extern void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1,
|
|
|
53
50
|
return NULL; \
|
|
54
51
|
}
|
|
55
52
|
|
|
56
|
-
#
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
53
|
+
#ifdef ENABLE_GVL_UNLOCK
|
|
54
|
+
#define DEFINE_GVL_STUB(name, when_non_void, rettype, lastparamtype, lastparamname) \
|
|
55
|
+
rettype gvl_##name(FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST3) lastparamtype lastparamname){ \
|
|
56
|
+
struct gvl_wrapper_##name##_params params = { \
|
|
57
|
+
{FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST1) lastparamname}, when_non_void((rettype)0) \
|
|
58
|
+
}; \
|
|
59
|
+
rb_thread_call_without_gvl(gvl_##name##_skeleton, ¶ms, RUBY_UBF_IO, 0); \
|
|
60
|
+
when_non_void( return params.retval; ) \
|
|
61
|
+
}
|
|
65
62
|
#else
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
63
|
+
#define DEFINE_GVL_STUB(name, when_non_void, rettype, lastparamtype, lastparamname) \
|
|
64
|
+
rettype gvl_##name(FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST3) lastparamtype lastparamname){ \
|
|
65
|
+
when_non_void( return ) \
|
|
66
|
+
name( FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST1) lastparamname ); \
|
|
67
|
+
}
|
|
70
68
|
#endif
|
|
71
69
|
|
|
72
70
|
#define DEFINE_GVL_STUB_DECL(name, when_non_void, rettype, lastparamtype, lastparamname) \
|
|
@@ -80,20 +78,21 @@ extern void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1,
|
|
|
80
78
|
return NULL; \
|
|
81
79
|
}
|
|
82
80
|
|
|
83
|
-
#
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
81
|
+
#ifdef ENABLE_GVL_UNLOCK
|
|
82
|
+
#define DEFINE_GVLCB_STUB(name, when_non_void, rettype, lastparamtype, lastparamname) \
|
|
83
|
+
rettype gvl_##name(FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST3) lastparamtype lastparamname){ \
|
|
84
|
+
struct gvl_wrapper_##name##_params params = { \
|
|
85
|
+
{FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST1) lastparamname}, when_non_void((rettype)0) \
|
|
86
|
+
}; \
|
|
87
|
+
rb_thread_call_with_gvl(gvl_##name##_skeleton, ¶ms); \
|
|
88
|
+
when_non_void( return params.retval; ) \
|
|
89
|
+
}
|
|
92
90
|
#else
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
91
|
+
#define DEFINE_GVLCB_STUB(name, when_non_void, rettype, lastparamtype, lastparamname) \
|
|
92
|
+
rettype gvl_##name(FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST3) lastparamtype lastparamname){ \
|
|
93
|
+
when_non_void( return ) \
|
|
94
|
+
name( FOR_EACH_PARAM_OF_##name(DEFINE_PARAM_LIST1) lastparamname ); \
|
|
95
|
+
}
|
|
97
96
|
#endif
|
|
98
97
|
|
|
99
98
|
#define GVL_TYPE_VOID(string)
|
|
@@ -116,6 +115,8 @@ extern void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1,
|
|
|
116
115
|
|
|
117
116
|
#define FOR_EACH_PARAM_OF_PQresetPoll(param)
|
|
118
117
|
|
|
118
|
+
#define FOR_EACH_PARAM_OF_PQping(param)
|
|
119
|
+
|
|
119
120
|
#define FOR_EACH_PARAM_OF_PQexec(param) \
|
|
120
121
|
param(PGconn *, conn)
|
|
121
122
|
|
|
@@ -195,8 +196,16 @@ extern void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1,
|
|
|
195
196
|
#define FOR_EACH_PARAM_OF_PQsendDescribePortal(param) \
|
|
196
197
|
param(PGconn *, conn)
|
|
197
198
|
|
|
199
|
+
#define FOR_EACH_PARAM_OF_PQsetClientEncoding(param) \
|
|
200
|
+
param(PGconn *, conn)
|
|
201
|
+
|
|
198
202
|
#define FOR_EACH_PARAM_OF_PQisBusy(param)
|
|
199
203
|
|
|
204
|
+
#define FOR_EACH_PARAM_OF_PQencryptPasswordConn(param) \
|
|
205
|
+
param(PGconn *, conn) \
|
|
206
|
+
param(const char *, passwd) \
|
|
207
|
+
param(const char *, user)
|
|
208
|
+
|
|
200
209
|
#define FOR_EACH_PARAM_OF_PQcancel(param) \
|
|
201
210
|
param(PGcancel *, cancel) \
|
|
202
211
|
param(char *, errbuf)
|
|
@@ -209,6 +218,7 @@ extern void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1,
|
|
|
209
218
|
function(PQreset, GVL_TYPE_VOID, void, PGconn *, conn) \
|
|
210
219
|
function(PQresetStart, GVL_TYPE_NONVOID, int, PGconn *, conn) \
|
|
211
220
|
function(PQresetPoll, GVL_TYPE_NONVOID, PostgresPollingStatusType, PGconn *, conn) \
|
|
221
|
+
function(PQping, GVL_TYPE_NONVOID, PGPing, const char *, conninfo) \
|
|
212
222
|
function(PQexec, GVL_TYPE_NONVOID, PGresult *, const char *, command) \
|
|
213
223
|
function(PQexecParams, GVL_TYPE_NONVOID, PGresult *, int, resultFormat) \
|
|
214
224
|
function(PQexecPrepared, GVL_TYPE_NONVOID, PGresult *, int, resultFormat) \
|
|
@@ -226,10 +236,11 @@ extern void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1,
|
|
|
226
236
|
function(PQsendQueryPrepared, GVL_TYPE_NONVOID, int, int, resultFormat) \
|
|
227
237
|
function(PQsendDescribePrepared, GVL_TYPE_NONVOID, int, const char *, stmt) \
|
|
228
238
|
function(PQsendDescribePortal, GVL_TYPE_NONVOID, int, const char *, portal) \
|
|
239
|
+
function(PQsetClientEncoding, GVL_TYPE_NONVOID, int, const char *, encoding) \
|
|
229
240
|
function(PQisBusy, GVL_TYPE_NONVOID, int, PGconn *, conn) \
|
|
241
|
+
function(PQencryptPasswordConn, GVL_TYPE_NONVOID, char *, const char *, algorithm) \
|
|
230
242
|
function(PQcancel, GVL_TYPE_NONVOID, int, int, errbufsize);
|
|
231
243
|
|
|
232
|
-
|
|
233
244
|
FOR_EACH_BLOCKING_FUNCTION( DEFINE_GVL_STUB_DECL );
|
|
234
245
|
|
|
235
246
|
|