def escape_bytea(self, data: bytes) -> bytes:
len_out = c_size_t()
if self.conn is not None:
+ self.conn._ensure_pgconn()
out = impl.PQescapeByteaConn(
self.conn.pgconn_ptr,
data,
return rv
def unescape_bytea(self, data: bytes) -> bytes:
+ # not needed, but let's keep it symmetric with the escaping:
+ # if a connection is passed in, it must be valid.
+ if self.conn is not None:
+ self.conn._ensure_pgconn()
+
len_out = c_size_t()
out = impl.PQunescapeBytea(data, pointer(t_cast(c_ulong, len_out)))
if not out:
import pytest
+import psycopg3
+
@pytest.mark.parametrize(
"data", [(b"hello\00world"), (b"\00\00\00\00")],
)
def test_escape_bytea(pq, pgconn, data):
- rv = pq.Escaping(pgconn).escape_bytea(data)
exp = br"\x" + b"".join(b"%02x" % c for c in data)
+ esc = pq.Escaping(pgconn)
+ rv = esc.escape_bytea(data)
assert rv == exp
+ pgconn.finish()
+ with pytest.raises(psycopg3.OperationalError):
+ esc.escape_bytea(data)
+
def test_escape_noconn(pq, pgconn):
data = bytes(range(256))
)
def test_unescape_bytea(pq, pgconn, data):
enc = br"\x" + b"".join(b"%02x" % c for c in data)
- rv = pq.Escaping(pgconn).unescape_bytea(enc)
+ esc = pq.Escaping(pgconn)
+ rv = esc.unescape_bytea(enc)
assert rv == data
+
+ pgconn.finish()
+ with pytest.raises(psycopg3.OperationalError):
+ esc.unescape_bytea(data)