def _pq_fetch(self): pgstatus = libpq.PQresultStatus(self._pgres) if pgstatus != libpq.PGRES_FATAL_ERROR: self._statusmessage = util.bytes_to_ascii( ffi.string(libpq.PQcmdStatus(self._pgres))) else: self._statusmessage = None self._no_tuples = True self._rownumber = 0 if pgstatus == libpq.PGRES_COMMAND_OK: rowcount = ffi.string(libpq.PQcmdTuples(self._pgres)) if not rowcount or not rowcount[0]: self._rowcount = -1 else: self._rowcount = int(rowcount) self._lastrowid = libpq.PQoidValue(self._pgres) self._clear_pgres() elif pgstatus == libpq.PGRES_TUPLES_OK: self._rowcount = libpq.PQntuples(self._pgres) return self._pq_fetch_tuples() elif pgstatus == libpq.PGRES_COPY_IN: return self._pq_fetch_copy_in() elif pgstatus == libpq.PGRES_COPY_OUT: return self._pq_fetch_copy_out() elif pgstatus == libpq.PGRES_EMPTY_QUERY: self._clear_pgres() raise ProgrammingError("can't execute an empty query") else: raise self._conn._create_exception(cursor=self)