pg 1.5.1-x86-mingw32 → 1.5.3-x86-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/History.md +11 -0
- data/ext/pg_result.c +11 -8
- data/ext/pg_type_map_by_column.c +1 -3
- 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/3.0/pg_ext.so +0 -0
- data/lib/3.1/pg_ext.so +0 -0
- data/lib/3.2/pg_ext.so +0 -0
- data/lib/pg/binary_decoder/timestamp.rb +3 -3
- data/lib/pg/binary_encoder/timestamp.rb +2 -2
- data/lib/pg/coder.rb +2 -2
- data/lib/pg/connection.rb +25 -4
- data/lib/pg/text_decoder/timestamp.rb +3 -3
- data/lib/pg/version.rb +1 -1
- data/lib/pg.rb +11 -0
- data/lib/x86-mingw32/libpq.dll +0 -0
- data.tar.gz.sig +0 -0
- 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: f158ca8346766cf576b77ad85303fae42b28909dc7e364faa4767612687602cf
|
4
|
+
data.tar.gz: b9acd008aaa88709da3843a20b1938fccee0abd3774f56760173f5ebb72f5d95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88eb37c1fc6c977fd43bbf84e0b92d9e622a19fb1ec4fe8aa150928de7b5d7f6a892a9eaf230b5ee5c5d9dbf1d5d2ae94936b6091751f82a81cf064ff29e407f
|
7
|
+
data.tar.gz: e9b52e6a49b60f744ce45ab125f9c986e673720992f6247390d2761641cd3d06bd2a5d130f43056b8916ecaa6a32a8e6ec7b0e28a6cefe24358dbb8232b02d01
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/History.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
## v1.5.3 [2023-04-28] Lars Kanis <lars@greiz-reinsdorf.de>
|
2
|
+
|
3
|
+
- Fix possible segfault when creating a new PG::Result with type map. [#530](https://github.com/ged/ruby-pg/pull/530)
|
4
|
+
- Add category to deprecation warnings of Coder.new, so that they are suppressed for most users. [#528](https://github.com/ged/ruby-pg/pull/528)
|
5
|
+
|
6
|
+
|
7
|
+
## v1.5.2 [2023-04-26] Lars Kanis <lars@greiz-reinsdorf.de>
|
8
|
+
|
9
|
+
- Fix regression in copy_data regarding binary format when using no coder. [#527](https://github.com/ged/ruby-pg/pull/527)
|
10
|
+
|
11
|
+
|
1
12
|
## v1.5.1 [2023-04-24] Lars Kanis <lars@greiz-reinsdorf.de>
|
2
13
|
|
3
14
|
- Don't overwrite flags of timestamp coders. [#524](https://github.com/ged/ruby-pg/pull/524)
|
data/ext/pg_result.c
CHANGED
@@ -208,12 +208,16 @@ pg_new_result2(PGresult *result, VALUE rb_pgconn)
|
|
208
208
|
|
209
209
|
this = (t_pg_result *)xmalloc(sizeof(*this) + sizeof(*this->fnames) * nfields);
|
210
210
|
this->pgresult = result;
|
211
|
+
/* Initialize connection and typemap prior to any object allocations,
|
212
|
+
* to make sure valid objects are marked. */
|
213
|
+
this->connection = rb_pgconn;
|
214
|
+
this->typemap = pg_typemap_all_strings;
|
215
|
+
this->p_typemap = RTYPEDDATA_DATA( this->typemap );
|
211
216
|
this->nfields = -1;
|
212
217
|
this->tuple_hash = Qnil;
|
213
218
|
this->field_map = Qnil;
|
214
219
|
this->flags = 0;
|
215
220
|
self = TypedData_Wrap_Struct(rb_cPGresult, &pgresult_type, this);
|
216
|
-
RB_OBJ_WRITE(self, &this->connection, rb_pgconn);
|
217
221
|
|
218
222
|
if( result ){
|
219
223
|
t_pg_connection *p_conn = pg_get_connection(rb_pgconn);
|
@@ -227,8 +231,6 @@ pg_new_result2(PGresult *result, VALUE rb_pgconn)
|
|
227
231
|
this->p_typemap = RTYPEDDATA_DATA( this->typemap );
|
228
232
|
this->flags = p_conn->flags;
|
229
233
|
} else {
|
230
|
-
RB_OBJ_WRITE(self, &this->typemap, pg_typemap_all_strings);
|
231
|
-
this->p_typemap = RTYPEDDATA_DATA( this->typemap );
|
232
234
|
this->enc_idx = rb_locale_encindex();
|
233
235
|
}
|
234
236
|
|
@@ -391,7 +393,7 @@ pg_result_clear(VALUE self)
|
|
391
393
|
*
|
392
394
|
*/
|
393
395
|
VALUE
|
394
|
-
pg_result_freeze(VALUE self)
|
396
|
+
static pg_result_freeze(VALUE self)
|
395
397
|
{
|
396
398
|
t_pg_result *this = pgresult_get_this(self);
|
397
399
|
|
@@ -405,7 +407,7 @@ pg_result_freeze(VALUE self)
|
|
405
407
|
*
|
406
408
|
* Returns +true+ if the backend result memory has been freed.
|
407
409
|
*/
|
408
|
-
VALUE
|
410
|
+
static VALUE
|
409
411
|
pgresult_cleared_p( VALUE self )
|
410
412
|
{
|
411
413
|
t_pg_result *this = pgresult_get_this(self);
|
@@ -422,7 +424,7 @@ pgresult_cleared_p( VALUE self )
|
|
422
424
|
* All other Result objects are automatically cleared by the GC when the object is no longer in use or manually by PG::Result#clear .
|
423
425
|
*
|
424
426
|
*/
|
425
|
-
VALUE
|
427
|
+
static VALUE
|
426
428
|
pgresult_autoclear_p( VALUE self )
|
427
429
|
{
|
428
430
|
t_pg_result *this = pgresult_get_this(self);
|
@@ -1422,8 +1424,9 @@ pgresult_type_map_set(VALUE self, VALUE typemap)
|
|
1422
1424
|
/* Check type of method param */
|
1423
1425
|
TypedData_Get_Struct(typemap, t_typemap, &pg_typemap_type, p_typemap);
|
1424
1426
|
|
1425
|
-
|
1426
|
-
|
1427
|
+
typemap = p_typemap->funcs.fit_to_result( typemap, self );
|
1428
|
+
RB_OBJ_WRITE(self, &this->typemap, typemap);
|
1429
|
+
this->p_typemap = RTYPEDDATA_DATA( typemap );
|
1427
1430
|
|
1428
1431
|
return typemap;
|
1429
1432
|
}
|
data/ext/pg_type_map_by_column.c
CHANGED
@@ -287,9 +287,7 @@ pg_tmbc_init(VALUE self, VALUE conv_ary)
|
|
287
287
|
t_pg_coder *p_coder;
|
288
288
|
/* Check argument type and store the coder pointer */
|
289
289
|
TypedData_Get_Struct(obj, t_pg_coder, &pg_coder_type, p_coder);
|
290
|
-
|
291
|
-
RB_OBJ_WRITTEN(self, Qnil, p_coder->coder_obj);
|
292
|
-
}
|
290
|
+
RB_OBJ_WRITTEN(self, Qnil, p_coder->coder_obj);
|
293
291
|
this->convs[i].cconv = p_coder;
|
294
292
|
}
|
295
293
|
}
|
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/3.0/pg_ext.so
CHANGED
Binary file
|
data/lib/3.1/pg_ext.so
CHANGED
Binary file
|
data/lib/3.2/pg_ext.so
CHANGED
Binary file
|
@@ -6,19 +6,19 @@ module PG
|
|
6
6
|
# Convenience classes for timezone options
|
7
7
|
class TimestampUtc < Timestamp
|
8
8
|
def initialize(hash={}, **kwargs)
|
9
|
-
warn
|
9
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
10
10
|
super(**hash, **kwargs, flags: PG::Coder::TIMESTAMP_DB_UTC | PG::Coder::TIMESTAMP_APP_UTC)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
class TimestampUtcToLocal < Timestamp
|
14
14
|
def initialize(hash={}, **kwargs)
|
15
|
-
warn
|
15
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
16
16
|
super(**hash, **kwargs, flags: PG::Coder::TIMESTAMP_DB_UTC | PG::Coder::TIMESTAMP_APP_LOCAL)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
class TimestampLocal < Timestamp
|
20
20
|
def initialize(hash={}, **kwargs)
|
21
|
-
warn
|
21
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
22
22
|
super(**hash, **kwargs, flags: PG::Coder::TIMESTAMP_DB_LOCAL | PG::Coder::TIMESTAMP_APP_LOCAL)
|
23
23
|
end
|
24
24
|
end
|
@@ -6,13 +6,13 @@ module PG
|
|
6
6
|
# Convenience classes for timezone options
|
7
7
|
class TimestampUtc < Timestamp
|
8
8
|
def initialize(hash={}, **kwargs)
|
9
|
-
warn
|
9
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
10
10
|
super(**hash, **kwargs, flags: PG::Coder::TIMESTAMP_DB_UTC)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
class TimestampLocal < Timestamp
|
14
14
|
def initialize(hash={}, **kwargs)
|
15
|
-
warn
|
15
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
16
16
|
super(**hash, **kwargs, flags: PG::Coder::TIMESTAMP_DB_LOCAL)
|
17
17
|
end
|
18
18
|
end
|
data/lib/pg/coder.rb
CHANGED
@@ -7,7 +7,7 @@ module PG
|
|
7
7
|
|
8
8
|
module BinaryFormatting
|
9
9
|
def initialize(hash={}, **kwargs)
|
10
|
-
warn
|
10
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
11
11
|
super(format: 1, **hash, **kwargs)
|
12
12
|
end
|
13
13
|
end
|
@@ -15,7 +15,7 @@ module PG
|
|
15
15
|
|
16
16
|
# Create a new coder object based on the attribute Hash.
|
17
17
|
def initialize(hash=nil, **kwargs)
|
18
|
-
warn
|
18
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) if hash
|
19
19
|
|
20
20
|
(hash || kwargs).each do |key, val|
|
21
21
|
send("#{key}=", val)
|
data/lib/pg/connection.rb
CHANGED
@@ -166,6 +166,14 @@ class PG::Connection
|
|
166
166
|
# conn.put_copy_data ['more', 'data', 'to', 'copy']
|
167
167
|
# end
|
168
168
|
#
|
169
|
+
# Also PG::BinaryEncoder::CopyRow can be used to send data in binary format to the server.
|
170
|
+
# In this case copy_data generates the header and trailer data automatically:
|
171
|
+
# enco = PG::BinaryEncoder::CopyRow.new
|
172
|
+
# conn.copy_data "COPY my_table FROM STDIN (FORMAT binary)", enco do
|
173
|
+
# conn.put_copy_data ['some', 'data', 'to', 'copy']
|
174
|
+
# conn.put_copy_data ['more', 'data', 'to', 'copy']
|
175
|
+
# end
|
176
|
+
#
|
169
177
|
# Example with CSV output format:
|
170
178
|
# conn.copy_data "COPY my_table TO STDOUT CSV" do
|
171
179
|
# while row=conn.get_copy_data
|
@@ -187,6 +195,18 @@ class PG::Connection
|
|
187
195
|
# This receives all rows of +my_table+ as ruby array:
|
188
196
|
# ["some", "data", "to", "copy"]
|
189
197
|
# ["more", "data", "to", "copy"]
|
198
|
+
#
|
199
|
+
# Also PG::BinaryDecoder::CopyRow can be used to retrieve data in binary format from the server.
|
200
|
+
# In this case the header and trailer data is processed by the decoder and the remaining +nil+ from get_copy_data is processed by copy_data, so that binary data can be processed equally to text data:
|
201
|
+
# deco = PG::BinaryDecoder::CopyRow.new
|
202
|
+
# conn.copy_data "COPY my_table TO STDOUT (FORMAT binary)", deco do
|
203
|
+
# while row=conn.get_copy_data
|
204
|
+
# p row
|
205
|
+
# end
|
206
|
+
# end
|
207
|
+
# This receives all rows of +my_table+ as ruby array:
|
208
|
+
# ["some", "data", "to", "copy"]
|
209
|
+
# ["more", "data", "to", "copy"]
|
190
210
|
|
191
211
|
def copy_data( sql, coder=nil )
|
192
212
|
raise PG::NotInBlockingMode.new("copy_data can not be used in nonblocking mode", connection: self) if nonblocking?
|
@@ -195,7 +215,7 @@ class PG::Connection
|
|
195
215
|
case res.result_status
|
196
216
|
when PGRES_COPY_IN
|
197
217
|
begin
|
198
|
-
if res.binary_tuples == 1
|
218
|
+
if coder && res.binary_tuples == 1
|
199
219
|
# Binary file header (11 byte signature, 32 bit flags and 32 bit extension length)
|
200
220
|
put_copy_data(BinarySignature + ("\x00" * 8))
|
201
221
|
end
|
@@ -219,7 +239,7 @@ class PG::Connection
|
|
219
239
|
begin
|
220
240
|
self.encoder_for_put_copy_data = old_coder if coder
|
221
241
|
|
222
|
-
if res.binary_tuples == 1
|
242
|
+
if coder && res.binary_tuples == 1
|
223
243
|
put_copy_data("\xFF\xFF") # Binary file trailer 16 bit "-1"
|
224
244
|
end
|
225
245
|
|
@@ -244,8 +264,9 @@ class PG::Connection
|
|
244
264
|
discard_results
|
245
265
|
raise
|
246
266
|
else
|
247
|
-
if res.binary_tuples == 1
|
248
|
-
#
|
267
|
+
if coder && res.binary_tuples == 1
|
268
|
+
# There are two end markers in binary mode: file trailer and the final nil.
|
269
|
+
# The file trailer is expected to be processed by BinaryDecoder::CopyRow and already returns nil, so that the remaining NULL from PQgetCopyData is retrieved here:
|
249
270
|
if get_copy_data
|
250
271
|
discard_results
|
251
272
|
raise PG::NotAllCopyDataRetrieved.new("Not all binary COPY data retrieved", connection: self)
|
@@ -6,19 +6,19 @@ module PG
|
|
6
6
|
# Convenience classes for timezone options
|
7
7
|
class TimestampUtc < Timestamp
|
8
8
|
def initialize(hash={}, **kwargs)
|
9
|
-
warn
|
9
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
10
10
|
super(**hash, **kwargs, flags: PG::Coder::TIMESTAMP_DB_UTC | PG::Coder::TIMESTAMP_APP_UTC)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
class TimestampUtcToLocal < Timestamp
|
14
14
|
def initialize(hash={}, **kwargs)
|
15
|
-
warn
|
15
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
16
16
|
super(**hash, **kwargs, flags: PG::Coder::TIMESTAMP_DB_UTC | PG::Coder::TIMESTAMP_APP_LOCAL)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
class TimestampLocal < Timestamp
|
20
20
|
def initialize(hash={}, **kwargs)
|
21
|
-
warn
|
21
|
+
warn("PG::Coder.new(hash) is deprecated. Please use keyword arguments instead! Called from #{caller.first}", category: :deprecated) unless hash.empty?
|
22
22
|
super(**hash, **kwargs, flags: PG::Coder::TIMESTAMP_DB_LOCAL | PG::Coder::TIMESTAMP_APP_LOCAL)
|
23
23
|
end
|
24
24
|
end
|
data/lib/pg/version.rb
CHANGED
data/lib/pg.rb
CHANGED
@@ -115,4 +115,15 @@ module PG
|
|
115
115
|
require 'pg/tuple'
|
116
116
|
autoload :VERSION, 'pg/version'
|
117
117
|
|
118
|
+
|
119
|
+
# Avoid "uninitialized constant Truffle::WarningOperations" on Truffleruby up to 22.3.1
|
120
|
+
if RUBY_ENGINE=="truffleruby" && !defined?(Truffle::WarningOperations)
|
121
|
+
module TruffleFixWarn
|
122
|
+
def warn(str, category=nil)
|
123
|
+
super(str)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
Warning.extend(TruffleFixWarn)
|
127
|
+
end
|
128
|
+
|
118
129
|
end # module PG
|
data/lib/x86-mingw32/libpq.dll
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
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.5.
|
4
|
+
version: 1.5.3
|
5
5
|
platform: x86-mingw32
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -34,7 +34,7 @@ cert_chain:
|
|
34
34
|
Dzx/gFSOrRoCt2mXNgrmcAfr386AfaMvCh7cXqdxZwmVo7ILZCYXck0pajvubsDd
|
35
35
|
NUIIFkVXvd1odFyK9LF1RFAtxn/iAmpx
|
36
36
|
-----END CERTIFICATE-----
|
37
|
-
date: 2023-04-
|
37
|
+
date: 2023-04-28 00:00:00.000000000 Z
|
38
38
|
dependencies: []
|
39
39
|
description: Pg is the Ruby interface to the PostgreSQL RDBMS. It works with PostgreSQL
|
40
40
|
9.3 and later.
|
metadata.gz.sig
CHANGED
Binary file
|