pg 1.2.2-x64-mingw32 → 1.2.3-x64-mingw32
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.tar.gz.sig +0 -0
- data/History.rdoc +9 -0
- data/README.rdoc +1 -1
- data/Rakefile +1 -1
- data/Rakefile.cross +11 -12
- data/ext/pg.h +1 -0
- data/ext/pg_coder.c +16 -4
- data/ext/pg_copy_coder.c +1 -0
- data/ext/pg_record_coder.c +1 -0
- data/ext/pg_type_map_by_class.c +5 -1
- data/lib/2.2/pg_ext.so +0 -0
- data/lib/2.3/pg_ext.so +0 -0
- data/lib/2.4/pg_ext.so +0 -0
- data/lib/2.5/pg_ext.so +0 -0
- data/lib/2.6/pg_ext.so +0 -0
- data/lib/2.7/pg_ext.so +0 -0
- data/lib/pg.rb +1 -1
- data/lib/pg/basic_type_mapping.rb +2 -2
- data/lib/x64-mingw32/libpq.dll +0 -0
- data/spec/helpers.rb +1 -3
- data/spec/pg/basic_type_mapping_spec.rb +10 -25
- data/spec/pg/connection_spec.rb +77 -39
- data/spec/pg/result_spec.rb +1 -1
- data/spec/pg/type_map_by_class_spec.rb +1 -1
- data/spec/pg/type_map_by_oid_spec.rb +2 -2
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3253303ff32bb3dd583ec84c7be3d9a579bc96959e2b95d36164c30b73895d28
|
4
|
+
data.tar.gz: '019c5aeeb7bd930a777d81b670dab10aca756105f5fb999f65bab0bf0831af96'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 308f6cfdd6365cc2be88d0e277d70a61bc1f21485b43614fbd671b95a524d1adc0abb75b6ee60f6e6ff24bbbe1f58fc28d00eda3df8846597d95e88137f65278
|
7
|
+
data.tar.gz: 4153ac49911b655e78f88eec13f0cbeabfa8890e1637f7345660556081dc1795b08388c30b8cc2e3c2fae115928f872022be36fe644db3f0e90ba1fd6f4dafe7
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
== v1.2.3 [2020-03-18] Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
Bugfixes:
|
4
|
+
|
5
|
+
- Fix possible segfault at `PG::Coder#encode`, `decode` or their implicit calls through
|
6
|
+
a typemap after GC.compact. #327
|
7
|
+
- Fix possible segfault in `PG::TypeMapByClass` after GC.compact. #328
|
8
|
+
|
9
|
+
|
1
10
|
== v1.2.2 [2020-01-06] Michael Granger <ged@FaerieMUD.org>
|
2
11
|
|
3
12
|
Enhancements:
|
data/README.rdoc
CHANGED
@@ -39,7 +39,7 @@ A small example usage:
|
|
39
39
|
* Ruby 2.2 or newer
|
40
40
|
* PostgreSQL 9.2.x or later (with headers, -dev packages, etc).
|
41
41
|
|
42
|
-
It usually
|
42
|
+
It usually works with earlier versions of Ruby/PostgreSQL as well, but those are
|
43
43
|
not regularly tested.
|
44
44
|
|
45
45
|
|
data/Rakefile
CHANGED
@@ -115,7 +115,7 @@ Rake::ExtensionTask.new do |ext|
|
|
115
115
|
ext.lib_dir = 'lib'
|
116
116
|
ext.source_pattern = "*.{c,h}"
|
117
117
|
ext.cross_compile = true
|
118
|
-
ext.cross_platform = CrossLibraries.map
|
118
|
+
ext.cross_platform = CrossLibraries.map(&:for_platform)
|
119
119
|
|
120
120
|
ext.cross_config_options += CrossLibraries.map do |lib|
|
121
121
|
{
|
data/Rakefile.cross
CHANGED
@@ -37,7 +37,7 @@ class CrossLibrary < OpenStruct
|
|
37
37
|
begin
|
38
38
|
FileUtils.rm_f '.test_symlink'
|
39
39
|
FileUtils.ln_s '/', '.test_symlink'
|
40
|
-
rescue SystemCallError
|
40
|
+
rescue NotImplementedError, SystemCallError
|
41
41
|
# Symlinks don't work -> use home directory instead
|
42
42
|
self.compile_home = Pathname( "~/.ruby-pg-build" ).expand_path
|
43
43
|
else
|
@@ -83,17 +83,6 @@ class CrossLibrary < OpenStruct
|
|
83
83
|
# clean intermediate files and folders
|
84
84
|
CLEAN.include( static_builddir.to_s )
|
85
85
|
|
86
|
-
|
87
|
-
def download(url, save_to)
|
88
|
-
part = save_to+".part"
|
89
|
-
sh "wget #{url.to_s.inspect} -O #{part.inspect} || curl #{url.to_s.inspect} -o #{part.inspect}"
|
90
|
-
FileUtils.mv part, save_to
|
91
|
-
end
|
92
|
-
|
93
|
-
def run(*args)
|
94
|
-
sh *args
|
95
|
-
end
|
96
|
-
|
97
86
|
#####################################################################
|
98
87
|
### C R O S S - C O M P I L A T I O N - T A S K S
|
99
88
|
#####################################################################
|
@@ -248,6 +237,16 @@ class CrossLibrary < OpenStruct
|
|
248
237
|
cp postgresql_lib, stage_libpq
|
249
238
|
end
|
250
239
|
end
|
240
|
+
|
241
|
+
def download(url, save_to)
|
242
|
+
part = save_to+".part"
|
243
|
+
sh "wget #{url.to_s.inspect} -O #{part.inspect} || curl #{url.to_s.inspect} -o #{part.inspect}"
|
244
|
+
FileUtils.mv part, save_to
|
245
|
+
end
|
246
|
+
|
247
|
+
def run(*args)
|
248
|
+
sh(*args)
|
249
|
+
end
|
251
250
|
end
|
252
251
|
|
253
252
|
CrossLibraries = [
|
data/ext/pg.h
CHANGED
@@ -304,6 +304,7 @@ VALUE pg_obj_to_i _(( VALUE ));
|
|
304
304
|
VALUE pg_tmbc_allocate _(( void ));
|
305
305
|
void pg_coder_init_encoder _(( VALUE ));
|
306
306
|
void pg_coder_init_decoder _(( VALUE ));
|
307
|
+
void pg_coder_mark _(( t_pg_coder * ));
|
307
308
|
char *pg_rb_str_ensure_capa _(( VALUE, long, char *, char ** ));
|
308
309
|
|
309
310
|
#define PG_RB_STR_ENSURE_CAPA( str, expand_len, curr_ptr, end_ptr ) \
|
data/ext/pg_coder.c
CHANGED
@@ -61,11 +61,23 @@ pg_coder_init_decoder( VALUE self )
|
|
61
61
|
rb_iv_set( self, "@name", Qnil );
|
62
62
|
}
|
63
63
|
|
64
|
+
void
|
65
|
+
pg_coder_mark(t_pg_coder *this)
|
66
|
+
{
|
67
|
+
rb_gc_mark(this->coder_obj);
|
68
|
+
}
|
69
|
+
|
70
|
+
static void
|
71
|
+
pg_composite_coder_mark(t_pg_composite_coder *this)
|
72
|
+
{
|
73
|
+
pg_coder_mark(&this->comp);
|
74
|
+
}
|
75
|
+
|
64
76
|
static VALUE
|
65
77
|
pg_simple_encoder_allocate( VALUE klass )
|
66
78
|
{
|
67
79
|
t_pg_coder *this;
|
68
|
-
VALUE self = Data_Make_Struct( klass, t_pg_coder,
|
80
|
+
VALUE self = Data_Make_Struct( klass, t_pg_coder, pg_coder_mark, -1, this );
|
69
81
|
pg_coder_init_encoder( self );
|
70
82
|
return self;
|
71
83
|
}
|
@@ -74,7 +86,7 @@ static VALUE
|
|
74
86
|
pg_composite_encoder_allocate( VALUE klass )
|
75
87
|
{
|
76
88
|
t_pg_composite_coder *this;
|
77
|
-
VALUE self = Data_Make_Struct( klass, t_pg_composite_coder,
|
89
|
+
VALUE self = Data_Make_Struct( klass, t_pg_composite_coder, pg_composite_coder_mark, -1, this );
|
78
90
|
pg_coder_init_encoder( self );
|
79
91
|
this->elem = NULL;
|
80
92
|
this->needs_quotation = 1;
|
@@ -87,7 +99,7 @@ static VALUE
|
|
87
99
|
pg_simple_decoder_allocate( VALUE klass )
|
88
100
|
{
|
89
101
|
t_pg_coder *this;
|
90
|
-
VALUE self = Data_Make_Struct( klass, t_pg_coder,
|
102
|
+
VALUE self = Data_Make_Struct( klass, t_pg_coder, pg_coder_mark, -1, this );
|
91
103
|
pg_coder_init_decoder( self );
|
92
104
|
return self;
|
93
105
|
}
|
@@ -96,7 +108,7 @@ static VALUE
|
|
96
108
|
pg_composite_decoder_allocate( VALUE klass )
|
97
109
|
{
|
98
110
|
t_pg_composite_coder *this;
|
99
|
-
VALUE self = Data_Make_Struct( klass, t_pg_composite_coder,
|
111
|
+
VALUE self = Data_Make_Struct( klass, t_pg_composite_coder, pg_composite_coder_mark, -1, this );
|
100
112
|
pg_coder_init_decoder( self );
|
101
113
|
this->elem = NULL;
|
102
114
|
this->needs_quotation = 1;
|
data/ext/pg_copy_coder.c
CHANGED
data/ext/pg_record_coder.c
CHANGED
data/ext/pg_type_map_by_class.c
CHANGED
@@ -126,7 +126,11 @@ pg_tmbk_mark( t_tmbk *this )
|
|
126
126
|
{
|
127
127
|
rb_gc_mark(this->typemap.default_typemap);
|
128
128
|
rb_gc_mark(this->klass_to_coder);
|
129
|
-
|
129
|
+
rb_gc_mark(this->self);
|
130
|
+
/* Clear the cache, to be safe from changes of klass VALUE by GC.compact.
|
131
|
+
* TODO: Move cache clearing to compactation callback provided by Ruby-2.7+.
|
132
|
+
*/
|
133
|
+
memset(&this->cache_row, 0, sizeof(this->cache_row));
|
130
134
|
}
|
131
135
|
|
132
136
|
static VALUE
|
data/lib/2.2/pg_ext.so
CHANGED
Binary file
|
data/lib/2.3/pg_ext.so
CHANGED
Binary file
|
data/lib/2.4/pg_ext.so
CHANGED
Binary file
|
data/lib/2.5/pg_ext.so
CHANGED
Binary file
|
data/lib/2.6/pg_ext.so
CHANGED
Binary file
|
data/lib/2.7/pg_ext.so
CHANGED
Binary file
|
data/lib/pg.rb
CHANGED
@@ -118,13 +118,13 @@ module PG::BasicTypeRegistry
|
|
118
118
|
def build_coder_maps(connection)
|
119
119
|
if supports_ranges?(connection)
|
120
120
|
result = connection.exec <<-SQL
|
121
|
-
SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput, r.rngsubtype
|
121
|
+
SELECT t.oid, t.typname::text, t.typelem, t.typdelim, t.typinput::text, r.rngsubtype
|
122
122
|
FROM pg_type as t
|
123
123
|
LEFT JOIN pg_range as r ON oid = rngtypid
|
124
124
|
SQL
|
125
125
|
else
|
126
126
|
result = connection.exec <<-SQL
|
127
|
-
SELECT t.oid, t.typname, t.typelem, t.typdelim, t.typinput
|
127
|
+
SELECT t.oid, t.typname::text, t.typelem, t.typdelim, t.typinput::text
|
128
128
|
FROM pg_type as t
|
129
129
|
SQL
|
130
130
|
end
|
data/lib/x64-mingw32/libpq.dll
CHANGED
Binary file
|
data/spec/helpers.rb
CHANGED
@@ -225,7 +225,7 @@ module PG::TestingHelpers
|
|
225
225
|
rescue => err
|
226
226
|
$stderr.puts "%p during test setup: %s" % [ err.class, err.message ]
|
227
227
|
$stderr.puts "See #{@logfile} for details."
|
228
|
-
$stderr.puts
|
228
|
+
$stderr.puts err.backtrace if $DEBUG
|
229
229
|
fail
|
230
230
|
end
|
231
231
|
|
@@ -370,8 +370,6 @@ RSpec.configure do |config|
|
|
370
370
|
else
|
371
371
|
config.filter_run_excluding :windows
|
372
372
|
end
|
373
|
-
config.filter_run_excluding :socket_io unless
|
374
|
-
PG::Connection.instance_methods.map( &:to_sym ).include?( :socket_io )
|
375
373
|
|
376
374
|
config.filter_run_excluding( :postgresql_93 ) if PG.library_version < 90300
|
377
375
|
config.filter_run_excluding( :postgresql_94 ) if PG.library_version < 90400
|
@@ -21,14 +21,6 @@ ensure
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
def expect_to_typecase_result_value_warning
|
25
|
-
warning = 'Warning: no type cast defined for type "name" with oid 19. '\
|
26
|
-
"Please cast this type explicitly to TEXT to be safe for future changes.\n"\
|
27
|
-
'Warning: no type cast defined for type "regproc" with oid 24. '\
|
28
|
-
"Please cast this type explicitly to TEXT to be safe for future changes.\n"
|
29
|
-
expect { yield }.to output(warning).to_stderr
|
30
|
-
end
|
31
|
-
|
32
24
|
describe 'Basic type mapping' do
|
33
25
|
|
34
26
|
describe PG::BasicTypeMapForQueries do
|
@@ -318,9 +310,7 @@ describe 'Basic type mapping' do
|
|
318
310
|
it "should convert format #{format} timestamps per TimestampUtc" do
|
319
311
|
restore_type("timestamp") do
|
320
312
|
PG::BasicTypeRegistry.register_type 0, 'timestamp', nil, PG::TextDecoder::TimestampUtc
|
321
|
-
|
322
|
-
@conn.type_map_for_results = PG::BasicTypeMapForResults.new(@conn)
|
323
|
-
end
|
313
|
+
@conn.type_map_for_results = PG::BasicTypeMapForResults.new(@conn)
|
324
314
|
res = @conn.exec_params( "SELECT CAST('2013-07-31 23:58:59+02' AS TIMESTAMP WITHOUT TIME ZONE),
|
325
315
|
CAST('1913-12-31 23:58:59.1231-03' AS TIMESTAMP WITHOUT TIME ZONE),
|
326
316
|
CAST('4714-11-24 23:58:59.1231-03 BC' AS TIMESTAMP WITHOUT TIME ZONE),
|
@@ -342,9 +332,7 @@ describe 'Basic type mapping' do
|
|
342
332
|
restore_type("timestamp") do
|
343
333
|
PG::BasicTypeRegistry.register_type 0, 'timestamp', nil, PG::TextDecoder::TimestampUtcToLocal
|
344
334
|
PG::BasicTypeRegistry.register_type 1, 'timestamp', nil, PG::BinaryDecoder::TimestampUtcToLocal
|
345
|
-
|
346
|
-
@conn.type_map_for_results = PG::BasicTypeMapForResults.new(@conn)
|
347
|
-
end
|
335
|
+
@conn.type_map_for_results = PG::BasicTypeMapForResults.new(@conn)
|
348
336
|
res = @conn.exec_params( "SELECT CAST('2013-07-31 23:58:59+02' AS TIMESTAMP WITHOUT TIME ZONE),
|
349
337
|
CAST('1913-12-31 23:58:59.1231-03' AS TIMESTAMP WITHOUT TIME ZONE),
|
350
338
|
CAST('4714-11-24 23:58:59.1231-03 BC' AS TIMESTAMP WITHOUT TIME ZONE),
|
@@ -366,9 +354,7 @@ describe 'Basic type mapping' do
|
|
366
354
|
restore_type("timestamp") do
|
367
355
|
PG::BasicTypeRegistry.register_type 0, 'timestamp', nil, PG::TextDecoder::TimestampLocal
|
368
356
|
PG::BasicTypeRegistry.register_type 1, 'timestamp', nil, PG::BinaryDecoder::TimestampLocal
|
369
|
-
|
370
|
-
@conn.type_map_for_results = PG::BasicTypeMapForResults.new(@conn)
|
371
|
-
end
|
357
|
+
@conn.type_map_for_results = PG::BasicTypeMapForResults.new(@conn)
|
372
358
|
res = @conn.exec_params( "SELECT CAST('2013-07-31 23:58:59' AS TIMESTAMP WITHOUT TIME ZONE),
|
373
359
|
CAST('1913-12-31 23:58:59.1231' AS TIMESTAMP WITHOUT TIME ZONE),
|
374
360
|
CAST('4714-11-24 23:58:59.1231-03 BC' AS TIMESTAMP WITHOUT TIME ZONE),
|
@@ -503,7 +489,6 @@ describe 'Basic type mapping' do
|
|
503
489
|
sql_vals = vals.map{|v| "CAST('#{v}' AS inet)"}
|
504
490
|
res = @conn.exec_params(("SELECT " + sql_vals.join(', ')), [], format )
|
505
491
|
vals.each_with_index do |v, i|
|
506
|
-
val = res.getvalue(0,i)
|
507
492
|
expect( res.getvalue(0,i) ).to eq( IPAddr.new(v) )
|
508
493
|
end
|
509
494
|
end
|
@@ -527,22 +512,22 @@ describe 'Basic type mapping' do
|
|
527
512
|
sql_vals = vals.map { |v| "CAST('#{v}' AS cidr)" }
|
528
513
|
res = @conn.exec_params(("SELECT " + sql_vals.join(', ')), [], format )
|
529
514
|
vals.each_with_index do |v, i|
|
530
|
-
|
515
|
+
val = res.getvalue(0,i)
|
531
516
|
ip, prefix = v.split('/', 2)
|
532
|
-
|
517
|
+
expect( val.to_s ).to eq( ip )
|
533
518
|
if val.respond_to?(:prefix)
|
534
519
|
val_prefix = val.prefix
|
535
520
|
else
|
536
|
-
|
521
|
+
default_prefix = (val.family == Socket::AF_INET ? 32 : 128)
|
537
522
|
range = val.to_range
|
538
523
|
val_prefix = default_prefix - Math.log(((range.end.to_i - range.begin.to_i) + 1), 2).to_i
|
539
524
|
end
|
540
525
|
if v.include?('/')
|
541
|
-
|
526
|
+
expect( val_prefix ).to eq( prefix.to_i )
|
542
527
|
elsif v.include?('.')
|
543
|
-
|
544
|
-
|
545
|
-
|
528
|
+
expect( val_prefix ).to eq( 32 )
|
529
|
+
else
|
530
|
+
expect( val_prefix ).to eq( 128 )
|
546
531
|
end
|
547
532
|
end
|
548
533
|
end
|
data/spec/pg/connection_spec.rb
CHANGED
@@ -173,7 +173,7 @@ describe PG::Connection do
|
|
173
173
|
end
|
174
174
|
end
|
175
175
|
|
176
|
-
it "can connect asynchronously"
|
176
|
+
it "can connect asynchronously" do
|
177
177
|
tmpconn = described_class.connect_start( @conninfo )
|
178
178
|
expect( tmpconn ).to be_a( described_class )
|
179
179
|
|
@@ -182,7 +182,7 @@ describe PG::Connection do
|
|
182
182
|
tmpconn.finish
|
183
183
|
end
|
184
184
|
|
185
|
-
it "can connect asynchronously for the duration of a block"
|
185
|
+
it "can connect asynchronously for the duration of a block" do
|
186
186
|
conn = nil
|
187
187
|
|
188
188
|
described_class.connect_start(@conninfo) do |tmpconn|
|
@@ -196,7 +196,7 @@ describe PG::Connection do
|
|
196
196
|
expect( conn ).to be_finished()
|
197
197
|
end
|
198
198
|
|
199
|
-
context "with async established connection"
|
199
|
+
context "with async established connection" do
|
200
200
|
before :each do
|
201
201
|
@conn2 = described_class.connect_start( @conninfo )
|
202
202
|
wait_for_polling_ok(@conn2)
|
@@ -340,10 +340,10 @@ describe PG::Connection do
|
|
340
340
|
@conn.trace( trace_io )
|
341
341
|
trace_io.close
|
342
342
|
|
343
|
-
|
343
|
+
@conn.exec("SELECT 1 AS one")
|
344
344
|
@conn.untrace
|
345
345
|
|
346
|
-
|
346
|
+
@conn.exec("SELECT 2 AS two")
|
347
347
|
|
348
348
|
trace_data = trace_file.read
|
349
349
|
|
@@ -902,7 +902,7 @@ describe PG::Connection do
|
|
902
902
|
end
|
903
903
|
|
904
904
|
|
905
|
-
it "handles server close while asynchronous connect"
|
905
|
+
it "handles server close while asynchronous connect" do
|
906
906
|
serv = TCPServer.new( '127.0.0.1', 54320 )
|
907
907
|
conn = described_class.connect_start( '127.0.0.1', 54320, "", "", "me", "xxxx", "somedb" )
|
908
908
|
expect( [PG::PGRES_POLLING_WRITING, PG::CONNECTION_OK] ).to include conn.connect_poll
|
@@ -963,7 +963,7 @@ describe PG::Connection do
|
|
963
963
|
conn.close
|
964
964
|
end
|
965
965
|
|
966
|
-
it "closes the IO fetched from #socket_io when the connection is closed", :without_transaction
|
966
|
+
it "closes the IO fetched from #socket_io when the connection is closed", :without_transaction do
|
967
967
|
conn = PG.connect( @conninfo )
|
968
968
|
io = conn.socket_io
|
969
969
|
conn.finish
|
@@ -971,7 +971,7 @@ describe PG::Connection do
|
|
971
971
|
expect { conn.socket_io }.to raise_error( PG::ConnectionBad, /connection is closed/i )
|
972
972
|
end
|
973
973
|
|
974
|
-
it "closes the IO fetched from #socket_io when the connection is reset", :without_transaction
|
974
|
+
it "closes the IO fetched from #socket_io when the connection is reset", :without_transaction do
|
975
975
|
conn = PG.connect( @conninfo )
|
976
976
|
io = conn.socket_io
|
977
977
|
conn.reset
|
@@ -1622,6 +1622,7 @@ describe PG::Connection do
|
|
1622
1622
|
|
1623
1623
|
expect( event ).to eq( "Möhre" )
|
1624
1624
|
expect( event.encoding ).to eq( Encoding::UTF_8 )
|
1625
|
+
expect( pid ).to be_a_kind_of(Integer)
|
1625
1626
|
expect( msg ).to eq( '世界線航跡蔵' )
|
1626
1627
|
expect( msg.encoding ).to eq( Encoding::UTF_8 )
|
1627
1628
|
end
|
@@ -1702,12 +1703,12 @@ describe PG::Connection do
|
|
1702
1703
|
row_encoder = PG::TextEncoder::CopyRow.new type_map: tm
|
1703
1704
|
|
1704
1705
|
@conn.exec( "CREATE TEMP TABLE copytable (col1 TEXT)" )
|
1705
|
-
|
1706
|
+
@conn.copy_data( "COPY copytable FROM STDOUT" ) do |res|
|
1706
1707
|
@conn.put_copy_data [1], row_encoder
|
1707
1708
|
@conn.put_copy_data ["2"], row_encoder
|
1708
1709
|
end
|
1709
1710
|
|
1710
|
-
|
1711
|
+
@conn.copy_data( "COPY copytable FROM STDOUT", row_encoder ) do |res|
|
1711
1712
|
@conn.put_copy_data [3]
|
1712
1713
|
@conn.put_copy_data ["4"]
|
1713
1714
|
end
|
@@ -1757,7 +1758,7 @@ describe PG::Connection do
|
|
1757
1758
|
|
1758
1759
|
it "can process #copy_data input queries with row encoder and respects character encoding" do
|
1759
1760
|
@conn2.exec( "CREATE TEMP TABLE copytable (col1 TEXT)" )
|
1760
|
-
|
1761
|
+
@conn2.copy_data( "COPY copytable FROM STDOUT" ) do |res|
|
1761
1762
|
@conn2.put_copy_data [1]
|
1762
1763
|
@conn2.put_copy_data ["Möhre".encode("utf-16le")]
|
1763
1764
|
end
|
@@ -1808,7 +1809,7 @@ describe PG::Connection do
|
|
1808
1809
|
it "can process #copy_data output with row decoder and respects character encoding" do
|
1809
1810
|
@conn2.internal_encoding = Encoding::ISO8859_1
|
1810
1811
|
rows = []
|
1811
|
-
|
1812
|
+
@conn2.copy_data( "COPY (VALUES('1'), ('Möhre')) TO STDOUT".encode("utf-16le") ) do |res|
|
1812
1813
|
while row=@conn2.get_copy_data
|
1813
1814
|
rows << row
|
1814
1815
|
end
|
@@ -1871,34 +1872,71 @@ describe PG::Connection do
|
|
1871
1872
|
end
|
1872
1873
|
|
1873
1874
|
describe "deprecated forms of methods" do
|
1874
|
-
|
1875
|
-
|
1876
|
-
|
1877
|
-
|
1878
|
-
|
1879
|
-
|
1880
|
-
|
1881
|
-
|
1882
|
-
|
1883
|
-
|
1884
|
-
|
1885
|
-
|
1886
|
-
|
1887
|
-
|
1888
|
-
|
1889
|
-
|
1890
|
-
|
1891
|
-
|
1892
|
-
|
1893
|
-
|
1894
|
-
|
1895
|
-
|
1896
|
-
|
1897
|
-
|
1875
|
+
if PG::VERSION < "2"
|
1876
|
+
it "should forward exec to exec_params" do
|
1877
|
+
res = @conn.exec("VALUES($1::INT)", [7]).values
|
1878
|
+
expect(res).to eq( [["7"]] )
|
1879
|
+
res = @conn.exec("VALUES($1::INT)", [7], 1).values
|
1880
|
+
expect(res).to eq( [[[7].pack("N")]] )
|
1881
|
+
res = @conn.exec("VALUES(8)", [], 1).values
|
1882
|
+
expect(res).to eq( [[[8].pack("N")]] )
|
1883
|
+
end
|
1884
|
+
|
1885
|
+
it "should forward exec_params to exec" do
|
1886
|
+
res = @conn.exec_params("VALUES(3); VALUES(4)").values
|
1887
|
+
expect(res).to eq( [["4"]] )
|
1888
|
+
res = @conn.exec_params("VALUES(3); VALUES(4)", nil).values
|
1889
|
+
expect(res).to eq( [["4"]] )
|
1890
|
+
res = @conn.exec_params("VALUES(3); VALUES(4)", nil, nil).values
|
1891
|
+
expect(res).to eq( [["4"]] )
|
1892
|
+
res = @conn.exec_params("VALUES(3); VALUES(4)", nil, 1).values
|
1893
|
+
expect(res).to eq( [["4"]] )
|
1894
|
+
res = @conn.exec_params("VALUES(3); VALUES(4)", nil, nil, nil).values
|
1895
|
+
expect(res).to eq( [["4"]] )
|
1896
|
+
expect{
|
1897
|
+
@conn.exec_params("VALUES(3); VALUES(4)", nil, nil, nil, nil).values
|
1898
|
+
}.to raise_error(ArgumentError)
|
1899
|
+
end
|
1900
|
+
|
1901
|
+
it "should forward send_query to send_query_params" do
|
1902
|
+
@conn.send_query("VALUES($1)", [5])
|
1903
|
+
expect(@conn.get_last_result.values).to eq( [["5"]] )
|
1904
|
+
end
|
1905
|
+
|
1906
|
+
it "should respond_to socket", :unix do
|
1907
|
+
expect( @conn.socket ).to eq( @conn.socket_io.fileno )
|
1908
|
+
end
|
1909
|
+
else
|
1910
|
+
# Method forwarding removed by PG::VERSION >= "2"
|
1911
|
+
it "shouldn't forward exec to exec_params" do
|
1912
|
+
expect do
|
1913
|
+
@conn.exec("VALUES($1::INT)", [7])
|
1914
|
+
end.to raise_error(ArgumentError)
|
1915
|
+
end
|
1916
|
+
|
1917
|
+
it "shouldn't forward exec_params to exec" do
|
1918
|
+
expect do
|
1919
|
+
@conn.exec_params("VALUES(3); VALUES(4)")
|
1920
|
+
end.to raise_error(ArgumentError)
|
1921
|
+
end
|
1922
|
+
|
1923
|
+
it "shouldn't forward send_query to send_query_params" do
|
1924
|
+
expect do
|
1925
|
+
@conn.send_query("VALUES($1)", [5])
|
1926
|
+
end.to raise_error(ArgumentError)
|
1927
|
+
end
|
1928
|
+
|
1929
|
+
it "shouldn't forward async_exec_params to async_exec" do
|
1930
|
+
expect do
|
1931
|
+
@conn.async_exec_params("VALUES(1)")
|
1932
|
+
end.to raise_error(ArgumentError)
|
1933
|
+
end
|
1898
1934
|
|
1899
|
-
|
1900
|
-
|
1901
|
-
|
1935
|
+
it "shouldn't respond_to socket" do
|
1936
|
+
expect do
|
1937
|
+
@conn.socket
|
1938
|
+
end.to raise_error(ArgumentError)
|
1939
|
+
end
|
1902
1940
|
end
|
1903
1941
|
|
1904
1942
|
it "shouldn't forward send_query_params to send_query" do
|
data/spec/pg/result_spec.rb
CHANGED
@@ -300,7 +300,7 @@ describe PG::Result do
|
|
300
300
|
it "detects division by zero as SQLSTATE 22012" do
|
301
301
|
sqlstate = nil
|
302
302
|
begin
|
303
|
-
|
303
|
+
@conn.exec("SELECT 1/0")
|
304
304
|
rescue PG::Error => e
|
305
305
|
sqlstate = e.result.result_error_field( PG::PG_DIAG_SQLSTATE ).to_i
|
306
306
|
end
|
@@ -132,7 +132,7 @@ describe PG::TypeMapByClass do
|
|
132
132
|
it "should raise error on invalid coder object" do
|
133
133
|
tm[TrueClass] = "dummy"
|
134
134
|
expect{
|
135
|
-
|
135
|
+
@conn.exec_params( "SELECT $1", [true], 0, tm )
|
136
136
|
}.to raise_error(NoMethodError, /undefined method.*call/)
|
137
137
|
end
|
138
138
|
end
|
@@ -54,8 +54,8 @@ describe PG::TypeMapByOid do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should check format when deleting coders" do
|
57
|
-
expect{ tm.rm_coder
|
58
|
-
expect{ tm.rm_coder
|
57
|
+
expect{ tm.rm_coder(2, 123) }.to raise_error(ArgumentError)
|
58
|
+
expect{ tm.rm_coder(-1, 123) }.to raise_error(ArgumentError)
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should check format when adding coders" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.3
|
5
5
|
platform: x64-mingw32
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -34,7 +34,7 @@ cert_chain:
|
|
34
34
|
83uuAYSy65yXDGXXPVBeKPVnYrqp91pqpS5Nh7wfuiCrE8lgU8PATh7K4BV1UhAT
|
35
35
|
0MHbAT42wTYkfUj3
|
36
36
|
-----END CERTIFICATE-----
|
37
|
-
date: 2020-
|
37
|
+
date: 2020-03-18 00:00:00.000000000 Z
|
38
38
|
dependencies:
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: hoe-mercurial
|
metadata.gz.sig
CHANGED
Binary file
|