Skip to content

Commit b5ec5d7

Browse files
committed
Add read_uuid() and read_i64() methods
1 parent e9391d4 commit b5ec5d7

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

buffer.pxd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ cdef class ReadBuffer:
113113
cdef bytes read_bytes(self, ssize_t nbytes)
114114
cdef bytes read_len_prefixed_bytes(self)
115115
cdef str read_len_prefixed_utf8(self)
116+
cdef read_uuid(self)
117+
cdef inline int64_t read_int64(self) except? -1
116118
cdef inline int32_t read_int32(self) except? -1
117119
cdef inline int16_t read_int16(self) except? -1
118120
cdef inline read_null_str(self)

buffer.pyx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,18 @@ cdef class ReadBuffer:
420420
else:
421421
return self.read_len_prefixed_bytes().decode('utf-8')
422422

423+
cdef read_uuid(self):
424+
cdef:
425+
bytes mem
426+
const char *cbuf
427+
428+
self._ensure_first_buf()
429+
cbuf = self._try_read_bytes(16)
430+
if cbuf != NULL:
431+
return pg_uuid_from_buf(cbuf)
432+
else:
433+
return pg_UUID(self.read_bytes(16))
434+
423435
cdef inline char read_byte(self) except? -1:
424436
cdef const char *first_byte
425437

@@ -435,6 +447,19 @@ cdef class ReadBuffer:
435447

436448
return first_byte[0]
437449

450+
cdef inline int64_t read_int64(self) except? -1:
451+
cdef:
452+
bytes mem
453+
const char *cbuf
454+
455+
self._ensure_first_buf()
456+
cbuf = self._try_read_bytes(8)
457+
if cbuf != NULL:
458+
return hton.unpack_int64(cbuf)
459+
else:
460+
mem = self.read_bytes(8)
461+
return hton.unpack_int64(cpython.PyBytes_AS_STRING(mem))
462+
438463
cdef inline int32_t read_int32(self) except? -1:
439464
cdef:
440465
bytes mem

0 commit comments

Comments
 (0)