Skip to content

Commit 39b1df0

Browse files
committed
Bump pgproto version
* Switch to a new FBBuffer abstraction * Drop Memory object * Start using new ReadBuffer.discard_message()
1 parent d2570bd commit 39b1df0

File tree

11 files changed

+115
-117
lines changed

11 files changed

+115
-117
lines changed

asyncpg/protocol/codecs/array.pyx

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ ctypedef object (*encode_func_ex)(ConnectionSettings settings,
2525

2626

2727
ctypedef object (*decode_func_ex)(ConnectionSettings settings,
28-
FastReadBuffer buf,
28+
FRBuffer *buf,
2929
const void *arg)
3030

3131

@@ -271,17 +271,17 @@ cdef inline textarray_encode(ConnectionSettings settings, WriteBuffer buf,
271271
buf.write_buffer(array_data)
272272

273273

274-
cdef inline array_decode(ConnectionSettings settings, FastReadBuffer buf,
274+
cdef inline array_decode(ConnectionSettings settings, FRBuffer *buf,
275275
decode_func_ex decoder, const void *decoder_arg):
276276
cdef:
277-
int32_t ndims = hton.unpack_int32(buf.read(4))
278-
int32_t flags = hton.unpack_int32(buf.read(4))
279-
uint32_t elem_oid = <uint32_t>hton.unpack_int32(buf.read(4))
277+
int32_t ndims = hton.unpack_int32(frb_read(buf, 4))
278+
int32_t flags = hton.unpack_int32(frb_read(buf, 4))
279+
uint32_t elem_oid = <uint32_t>hton.unpack_int32(frb_read(buf, 4))
280280
list result
281281
int i
282282
int32_t elem_len
283283
int32_t elem_count = 1
284-
FastReadBuffer elem_buf = FastReadBuffer.new()
284+
FRBuffer elem_buf
285285
int32_t dims[ARRAY_MAXDIM]
286286
Codec elem_codec
287287

@@ -295,40 +295,40 @@ cdef inline array_decode(ConnectionSettings settings, FastReadBuffer buf,
295295
format(ndims, ARRAY_MAXDIM))
296296

297297
for i in range(ndims):
298-
dims[i] = hton.unpack_int32(buf.read(4))
298+
dims[i] = hton.unpack_int32(frb_read(buf, 4))
299299
# Ignore the lower bound information
300-
buf.read(4)
300+
frb_read(buf, 4)
301301

302302
if ndims == 1:
303303
# Fast path for flat arrays
304304
elem_count = dims[0]
305305
result = cpython.PyList_New(elem_count)
306306

307307
for i in range(elem_count):
308-
elem_len = hton.unpack_int32(buf.read(4))
308+
elem_len = hton.unpack_int32(frb_read(buf, 4))
309309
if elem_len == -1:
310310
elem = None
311311
else:
312-
elem_buf.slice_from(buf, elem_len)
313-
elem = decoder(settings, elem_buf, decoder_arg)
312+
frb_slice_from(&elem_buf, buf, elem_len)
313+
elem = decoder(settings, &elem_buf, decoder_arg)
314314

315315
cpython.Py_INCREF(elem)
316316
cpython.PyList_SET_ITEM(result, i, elem)
317317

318318
else:
319319
result = _nested_array_decode(settings, buf,
320320
decoder, decoder_arg, ndims, dims,
321-
elem_buf)
321+
&elem_buf)
322322

323323
return result
324324

325325

326326
cdef _nested_array_decode(ConnectionSettings settings,
327-
FastReadBuffer buf,
327+
FRBuffer *buf,
328328
decode_func_ex decoder,
329329
const void *decoder_arg,
330330
int32_t ndims, int32_t *dims,
331-
FastReadBuffer elem_buf):
331+
FRBuffer *elem_buf):
332332

333333
cdef:
334334
int32_t elem_len
@@ -351,12 +351,12 @@ cdef _nested_array_decode(ConnectionSettings settings,
351351

352352
for i in range(array_len):
353353
# Decode the element.
354-
elem_len = hton.unpack_int32(buf.read(4))
354+
elem_len = hton.unpack_int32(frb_read(buf, 4))
355355
if elem_len == -1:
356356
elem = None
357357
else:
358358
elem = decoder(settings,
359-
elem_buf.slice_from(buf, elem_len),
359+
frb_slice_from(elem_buf, buf, elem_len),
360360
decoder_arg)
361361

362362
# Take an explicit reference for PyList_SET_ITEM in the below
@@ -399,7 +399,7 @@ cdef _nested_array_decode(ConnectionSettings settings,
399399
return stride
400400

401401

402-
cdef textarray_decode(ConnectionSettings settings, FastReadBuffer buf,
402+
cdef textarray_decode(ConnectionSettings settings, FRBuffer *buf,
403403
decode_func_ex decoder, const void *decoder_arg,
404404
Py_UCS4 typdelim):
405405
cdef:
@@ -455,7 +455,7 @@ cdef _textarray_decode(ConnectionSettings settings,
455455
int i
456456
object item
457457
str item_text
458-
FastReadBuffer item_buf = FastReadBuffer.new()
458+
FRBuffer item_buf
459459
char *pg_item_str
460460
ssize_t pg_item_len
461461

@@ -639,9 +639,8 @@ cdef _textarray_decode(ConnectionSettings settings,
639639
# for the element type.
640640
pgproto.as_pg_string_and_size(
641641
settings, item_text, &pg_item_str, &pg_item_len)
642-
item_buf.buf = pg_item_str
643-
item_buf.len = pg_item_len
644-
item = decoder(settings, item_buf, decoder_arg)
642+
frb_init(&item_buf, pg_item_str, pg_item_len)
643+
item = decoder(settings, &item_buf, decoder_arg)
645644

646645
# Place the decoded element in the array.
647646
cpython.Py_INCREF(item)
@@ -815,7 +814,7 @@ cdef uint4_encode_ex(ConnectionSettings settings, WriteBuffer buf, object obj,
815814
return pgproto.uint4_encode(settings, buf, obj)
816815

817816

818-
cdef uint4_decode_ex(ConnectionSettings settings, FastReadBuffer buf,
817+
cdef uint4_decode_ex(ConnectionSettings settings, FRBuffer *buf,
819818
const void *arg):
820819
return pgproto.uint4_decode(settings, buf)
821820

@@ -825,7 +824,7 @@ cdef arrayoid_encode(ConnectionSettings settings, WriteBuffer buf, items):
825824
<encode_func_ex>&uint4_encode_ex, NULL)
826825

827826

828-
cdef arrayoid_decode(ConnectionSettings settings, FastReadBuffer buf):
827+
cdef arrayoid_decode(ConnectionSettings settings, FRBuffer *buf):
829828
return array_decode(settings, buf, <decode_func_ex>&uint4_decode_ex, NULL)
830829

831830

@@ -834,7 +833,7 @@ cdef text_encode_ex(ConnectionSettings settings, WriteBuffer buf, object obj,
834833
return pgproto.text_encode(settings, buf, obj)
835834

836835

837-
cdef text_decode_ex(ConnectionSettings settings, FastReadBuffer buf,
836+
cdef text_decode_ex(ConnectionSettings settings, FRBuffer *buf,
838837
const void *arg):
839838
return pgproto.text_decode(settings, buf)
840839

@@ -844,11 +843,11 @@ cdef arraytext_encode(ConnectionSettings settings, WriteBuffer buf, items):
844843
<encode_func_ex>&text_encode_ex, NULL)
845844

846845

847-
cdef arraytext_decode(ConnectionSettings settings, FastReadBuffer buf):
846+
cdef arraytext_decode(ConnectionSettings settings, FRBuffer *buf):
848847
return array_decode(settings, buf, <decode_func_ex>&text_decode_ex, NULL)
849848

850849

851-
cdef anyarray_decode(ConnectionSettings settings, FastReadBuffer buf):
850+
cdef anyarray_decode(ConnectionSettings settings, FRBuffer *buf):
852851
# Instances of anyarray (or any other polymorphic pseudotype) are
853852
# never supposed to be returned from actual queries.
854853
raise exceptions.ProtocolError(

asyncpg/protocol/codecs/base.pxd

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ctypedef object (*encode_func)(ConnectionSettings settings,
1010
object obj)
1111

1212
ctypedef object (*decode_func)(ConnectionSettings settings,
13-
FastReadBuffer buf)
13+
FRBuffer *buf)
1414

1515
ctypedef object (*codec_encode_func)(Codec codec,
1616
ConnectionSettings settings,
@@ -19,7 +19,7 @@ ctypedef object (*codec_encode_func)(Codec codec,
1919

2020
ctypedef object (*codec_decode_func)(Codec codec,
2121
ConnectionSettings settings,
22-
FastReadBuffer buf)
22+
FRBuffer *buf)
2323

2424

2525
cdef enum CodecType:
@@ -101,29 +101,24 @@ cdef class Codec:
101101
cdef encode_in_python(self, ConnectionSettings settings, WriteBuffer buf,
102102
object obj)
103103

104-
cdef decode_scalar(self, ConnectionSettings settings, FastReadBuffer buf)
104+
cdef decode_scalar(self, ConnectionSettings settings, FRBuffer *buf)
105105

106-
cdef decode_array(self, ConnectionSettings settings, FastReadBuffer buf)
106+
cdef decode_array(self, ConnectionSettings settings, FRBuffer *buf)
107107

108-
cdef decode_array_text(self, ConnectionSettings settings,
109-
FastReadBuffer buf)
108+
cdef decode_array_text(self, ConnectionSettings settings, FRBuffer *buf)
110109

111-
cdef decode_range(self, ConnectionSettings settings, FastReadBuffer buf)
110+
cdef decode_range(self, ConnectionSettings settings, FRBuffer *buf)
112111

113-
cdef decode_composite(self, ConnectionSettings settings,
114-
FastReadBuffer buf)
112+
cdef decode_composite(self, ConnectionSettings settings, FRBuffer *buf)
115113

116-
cdef decode_in_python(self, ConnectionSettings settings,
117-
FastReadBuffer buf)
114+
cdef decode_in_python(self, ConnectionSettings settings, FRBuffer *buf)
118115

119116
cdef inline encode(self,
120117
ConnectionSettings settings,
121118
WriteBuffer buf,
122119
object obj)
123120

124-
cdef inline decode(self,
125-
ConnectionSettings settings,
126-
FastReadBuffer buf)
121+
cdef inline decode(self, ConnectionSettings settings, FRBuffer *buf)
127122

128123
cdef has_encoder(self)
129124
cdef has_decoder(self)

asyncpg/protocol/codecs/base.pyx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -191,25 +191,25 @@ cdef class Codec:
191191
object obj):
192192
return self.encoder(self, settings, buf, obj)
193193

194-
cdef decode_scalar(self, ConnectionSettings settings, FastReadBuffer buf):
194+
cdef decode_scalar(self, ConnectionSettings settings, FRBuffer *buf):
195195
return self.c_decoder(settings, buf)
196196

197-
cdef decode_array(self, ConnectionSettings settings, FastReadBuffer buf):
197+
cdef decode_array(self, ConnectionSettings settings, FRBuffer *buf):
198198
return array_decode(settings, buf, codec_decode_func_ex,
199199
<void*>(<cpython.PyObject>self.element_codec))
200200

201201
cdef decode_array_text(self, ConnectionSettings settings,
202-
FastReadBuffer buf):
202+
FRBuffer *buf):
203203
return textarray_decode(settings, buf, codec_decode_func_ex,
204204
<void*>(<cpython.PyObject>self.element_codec),
205205
self.element_delimiter)
206206

207-
cdef decode_range(self, ConnectionSettings settings, FastReadBuffer buf):
207+
cdef decode_range(self, ConnectionSettings settings, FRBuffer *buf):
208208
return range_decode(settings, buf, codec_decode_func_ex,
209209
<void*>(<cpython.PyObject>self.element_codec))
210210

211211
cdef decode_composite(self, ConnectionSettings settings,
212-
FastReadBuffer buf):
212+
FRBuffer *buf):
213213
cdef:
214214
object result
215215
ssize_t elem_count
@@ -218,9 +218,9 @@ cdef class Codec:
218218
uint32_t elem_typ
219219
uint32_t received_elem_typ
220220
Codec elem_codec
221-
FastReadBuffer elem_buf = FastReadBuffer.new()
221+
FRBuffer elem_buf
222222

223-
elem_count = <ssize_t><uint32_t>hton.unpack_int32(buf.read(4))
223+
elem_count = <ssize_t><uint32_t>hton.unpack_int32(frb_read(buf, 4))
224224
if elem_count != len(self.element_type_oids):
225225
raise exceptions.OutdatedSchemaCacheError(
226226
'unexpected number of attributes of composite type: '
@@ -235,7 +235,7 @@ cdef class Codec:
235235
result = record.ApgRecord_New(self.record_desc, elem_count)
236236
for i in range(elem_count):
237237
elem_typ = self.element_type_oids[i]
238-
received_elem_typ = <uint32_t>hton.unpack_int32(buf.read(4))
238+
received_elem_typ = <uint32_t>hton.unpack_int32(frb_read(buf, 4))
239239

240240
if received_elem_typ != elem_typ:
241241
raise exceptions.OutdatedSchemaCacheError(
@@ -253,21 +253,21 @@ cdef class Codec:
253253
position=i,
254254
)
255255

256-
elem_len = hton.unpack_int32(buf.read(4))
256+
elem_len = hton.unpack_int32(frb_read(buf, 4))
257257
if elem_len == -1:
258258
elem = None
259259
else:
260260
elem_codec = self.element_codecs[i]
261-
elem = elem_codec.decode(settings,
262-
elem_buf.slice_from(buf, elem_len))
261+
elem = elem_codec.decode(
262+
settings, frb_slice_from(&elem_buf, buf, elem_len))
263263

264264
cpython.Py_INCREF(elem)
265265
record.ApgRecord_SET_ITEM(result, i, elem)
266266

267267
return result
268268

269269
cdef decode_in_python(self, ConnectionSettings settings,
270-
FastReadBuffer buf):
270+
FRBuffer *buf):
271271
if self.xformat == PG_XFORMAT_OBJECT:
272272
if self.format == PG_FORMAT_BINARY:
273273
data = pgproto.bytea_decode(settings, buf)
@@ -284,7 +284,7 @@ cdef class Codec:
284284

285285
return self.py_decoder(data)
286286

287-
cdef inline decode(self, ConnectionSettings settings, FastReadBuffer buf):
287+
cdef inline decode(self, ConnectionSettings settings, FRBuffer *buf):
288288
return self.decoder(self, settings, buf)
289289

290290
cdef inline has_encoder(self):
@@ -398,7 +398,7 @@ cdef codec_encode_func_ex(ConnectionSettings settings, WriteBuffer buf,
398398

399399

400400
# Decode callback for arrays
401-
cdef codec_decode_func_ex(ConnectionSettings settings, FastReadBuffer buf,
401+
cdef codec_decode_func_ex(ConnectionSettings settings, FRBuffer *buf,
402402
const void *arg):
403403
return (<Codec>arg).decode(settings, buf)
404404

asyncpg/protocol/codecs/range.pyx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,30 +108,30 @@ cdef range_encode(ConnectionSettings settings, WriteBuffer buf,
108108
buf.write_buffer(bounds_data)
109109

110110

111-
cdef range_decode(ConnectionSettings settings, FastReadBuffer buf,
111+
cdef range_decode(ConnectionSettings settings, FRBuffer *buf,
112112
decode_func_ex decoder, const void *decoder_arg):
113113
cdef:
114-
uint8_t flags = <uint8_t>buf.read(1)[0]
114+
uint8_t flags = <uint8_t>frb_read(buf, 1)[0]
115115
int32_t bound_len
116116
object lower = None
117117
object upper = None
118-
FastReadBuffer bound_buf = FastReadBuffer.new()
118+
FRBuffer bound_buf
119119

120120
if _range_has_lbound(flags):
121-
bound_len = hton.unpack_int32(buf.read(4))
121+
bound_len = hton.unpack_int32(frb_read(buf, 4))
122122
if bound_len == -1:
123123
lower = None
124124
else:
125-
bound_buf.slice_from(buf, bound_len)
126-
lower = decoder(settings, bound_buf, decoder_arg)
125+
frb_slice_from(&bound_buf, buf, bound_len)
126+
lower = decoder(settings, &bound_buf, decoder_arg)
127127

128128
if _range_has_ubound(flags):
129-
bound_len = hton.unpack_int32(buf.read(4))
129+
bound_len = hton.unpack_int32(frb_read(buf, 4))
130130
if bound_len == -1:
131131
upper = None
132132
else:
133-
bound_buf.slice_from(buf, bound_len)
134-
upper = decoder(settings, bound_buf, decoder_arg)
133+
frb_slice_from(&bound_buf, buf, bound_len)
134+
upper = decoder(settings, &bound_buf, decoder_arg)
135135

136136
return apg_types.Range(lower=lower, upper=upper,
137137
lower_inc=(flags & RANGE_LB_INC) != 0,

asyncpg/protocol/codecs/record.pyx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,22 @@ cdef inline record_encode_frame(ConnectionSettings settings, WriteBuffer buf,
1717
buf.write_buffer(elem_data)
1818

1919

20-
cdef anonymous_record_decode(ConnectionSettings settings, FastReadBuffer buf):
20+
cdef anonymous_record_decode(ConnectionSettings settings, FRBuffer *buf):
2121
cdef:
2222
tuple result
2323
ssize_t elem_count
2424
ssize_t i
2525
int32_t elem_len
2626
uint32_t elem_typ
2727
Codec elem_codec
28-
FastReadBuffer elem_buf = FastReadBuffer.new()
28+
FRBuffer elem_buf
2929

30-
elem_count = <ssize_t><uint32_t>hton.unpack_int32(buf.read(4))
30+
elem_count = <ssize_t><uint32_t>hton.unpack_int32(frb_read(buf, 4))
3131
result = cpython.PyTuple_New(elem_count)
3232

3333
for i in range(elem_count):
34-
elem_typ = <uint32_t>hton.unpack_int32(buf.read(4))
35-
elem_len = hton.unpack_int32(buf.read(4))
34+
elem_typ = <uint32_t>hton.unpack_int32(frb_read(buf, 4))
35+
elem_len = hton.unpack_int32(frb_read(buf, 4))
3636

3737
if elem_len == -1:
3838
elem = None
@@ -43,7 +43,7 @@ cdef anonymous_record_decode(ConnectionSettings settings, FastReadBuffer buf):
4343
'no decoder for composite type element in '
4444
'position {} of type OID {}'.format(i, elem_typ))
4545
elem = elem_codec.decode(settings,
46-
elem_buf.slice_from(buf, elem_len))
46+
frb_slice_from(&elem_buf, buf, elem_len))
4747

4848
cpython.Py_INCREF(elem)
4949
cpython.PyTuple_SET_ITEM(result, i, elem)

0 commit comments

Comments
 (0)