def parse_binary(value, length, cursor): to_length = libpq.c_uint() s = libpq.PQunescapeBytea(value, libpq.pointer(to_length)) try: res = buffer(s[:to_length.value]) finally: libpq.PQfreemem(s) return res
def getquoted(self): if self._wrapped is None: return "NULL" to_length = libpq.c_uint() if self._conn: data_pointer = libpq.PQescapeByteaConn( self._conn._pgconn, str(self._wrapped), len(self._wrapped), libpq.pointer(to_length) ) else: data_pointer = libpq.PQescapeBytea(self._wrapped, len(self._wrapped), libpq.pointer(to_length)) data = data_pointer[: to_length.value - 1] libpq.PQfreemem(data_pointer) if self._conn and self._conn._equote: return r"E'%s'::bytea" % data return r"'%s'::bytea" % data
def _pq_fetch_copy_out(self): is_text = isinstance(self._copyfile, TextIOBase) pgconn = self._conn._pgconn while True: buf = libpq.pointer(libpq.c_char_p()) length = libpq.PQgetCopyData(pgconn, buf, 0) if length > 0: value = buf.contents.value if is_text: value = typecasts.parse_unicode(value, length, self) libpq.PQfreemem(buf.contents) if value is None: return self._copyfile.write(value) elif length == -2: raise self._conn._create_exception() else: break self._clear_pgres() util.pq_clear_async(pgconn)