def poll(self): if self.status == consts.STATUS_SETUP: self.status = consts.STATUS_CONNECTING return consts.POLL_WRITE if self.status == consts.STATUS_CONNECTING: res = self._poll_connecting() if res == consts.POLL_OK and self._async: return self._poll_setup_async() return res if self.status in (consts.STATUS_READY, consts.STATUS_BEGIN, consts.STATUS_PREPARED): res = self._poll_query() if res == consts.POLL_OK and self._async and self._async_cursor: # Get the cursor object from the weakref curs = self._async_cursor() if curs is None: util.pq_clear_async(self._pgconn) raise exceptions.InterfaceError( "the asynchronous cursor has disappeared") libpq.PQclear(curs._pgres) curs._pgres = util.pq_get_last_result(self._pgconn) try: curs._pq_fetch() finally: self._async_cursor = None return res return consts.POLL_ERROR
def poll(self): if self.status == consts.STATUS_SETUP: self.status = consts.STATUS_CONNECTING return consts.POLL_WRITE if self.status == consts.STATUS_CONNECTING: res = self._poll_connecting() if res == consts.POLL_OK and self._async: return self._poll_setup_async() return res if self.status in (consts.STATUS_READY, consts.STATUS_BEGIN, consts.STATUS_PREPARED): res = self._poll_query() if res == consts.POLL_OK and self._async and self._async_cursor: # Get the cursor object from the weakref curs = self._async_cursor() if curs is None: util.pq_clear_async(self) raise exceptions.InterfaceError( "the asynchronous cursor has disappeared") libpq.PQclear(curs._pgres) curs._pgres = util.pq_get_last_result(self._pgconn) try: curs._pq_fetch() finally: self._async_cursor = None return res return consts.POLL_ERROR
def _pq_fetch_copy_out(self): is_text = isinstance(self._copyfile, TextIOBase) pgconn = self._conn._pgconn while True: buf = ffi.new('char **') length = libpq.PQgetCopyData(pgconn, buf, 0) if length > 0: if buf[0] == ffi.NULL: return value = ffi.buffer(buf[0], length) if is_text: value = typecasts.parse_unicode(value[:], length, self) self._copyfile.write(value) elif length == -2: raise self._conn._create_exception(cursor=self) else: break self._clear_pgres() util.pq_clear_async(pgconn)
def _pq_fetch_copy_in(self): pgconn = self._conn._pgconn size = self._copysize error = 0 while True: data = self._copyfile.read(size) if isinstance(self._copyfile, TextIOBase): data = data.encode(self._conn._py_enc) if not data: break res = libpq.PQputCopyData(pgconn, data, len(data)) if res <= 0: error = 2 break errmsg = ffi.NULL if error == 2: errmsg = 'error in PQputCopyData() call' libpq.PQputCopyEnd(pgconn, errmsg) self._clear_pgres() util.pq_clear_async(pgconn)