Generated by Cython 3.2.8

Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.

Raw output: egress.pxi

 0001: # Egress (QWP/WebSocket reader) Cython glue.
 0002: #
 0003: # `QueryResult` exposes the Arrow PyCapsule Interface
 0004: # (`__arrow_c_stream__`) directly off the Rust cursor, so polars /
 0005: # duckdb / other Arrow-native consumers can read query results
 0006: # without pyarrow. `to_pandas` / `iter_pandas` default to a
 0007: # pyarrow-free native numpy path; `to_arrow` / `iter_arrow` /
 0008: # `to_polars` / `iter_polars` lazy-import pyarrow.
 0009: 
 0010: cimport numpy as cnp
 0011: 
+0012: import _thread
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_thread, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 12, __pyx_L1_error)
  __pyx_t_18 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_18);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_thread, __pyx_t_18) < (0)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+0013: import collections
  __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_collections, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_18 = __pyx_t_3;
  __Pyx_GOTREF(__pyx_t_18);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_collections, __pyx_t_18) < (0)) __PYX_ERR(2, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0014: 
 0015: 
+0016: cdef inline object _reader_err_to_py(questdb_error* err):
static CYTHON_INLINE PyObject *__pyx_f_7questdb_7_client__reader_err_to_py(questdb_error *__pyx_v_err) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._reader_err_to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0017:     """Construct a ``QuestDBError`` from a ``questdb_error*`` and free it."""
+0018:     return c_err_to_py(err)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0019: 
 0020: 
 0021: # no_gc_clear: tp_clear would put None in the `__dict__` slot, and a
 0022: # `PooledReader` lease collected in the same cycle still closes this reader
 0023: # from its `__dealloc__`. `_close()` then writes through that slot, which
 0024: # CPython 3.13+ does not type-check, so the process crashes (earlier
 0025: # versions print an unraisable SystemError). Cycles through this handle stay
 0026: # collectable on CPython: the OIDC provider and the bearer-token holder it
 0027: # references have their own tp_clear. Not on PyPy, whose collector cannot
 0028: # see the typed fields a cursor or lease holds this handle (or its QuestDB)
 0029: # by. A reference kept where PyPy does see it -- set through
 0030: # `PyObject_GenericSetAttr` -- is gone from the dictionary `__dealloc__` can
 0031: # read, and every release path needs it there, so the PyPy limitation is
 0032: # documented instead (docs/token_providers.rst, "Application providers").
+0033: @cython.no_gc_clear
struct __pyx_obj_7questdb_7_client__ReaderHandle {
  PyObject_HEAD
  struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *__pyx_vtab;
  struct qwp_reader *_reader;
  int _must_close;
  PyObject *_oidc_auth;
  PyObject *__dict__;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle {
  PyObject *(*_attach)(struct __pyx_obj_7questdb_7_client__ReaderHandle *, struct qwp_reader *);
  void (*_close)(struct __pyx_obj_7questdb_7_client__ReaderHandle *, struct __pyx_opt_args_7questdb_7_client_13_ReaderHandle__close *__pyx_optional_args);
};
static struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *__pyx_vtabptr_7questdb_7_client__ReaderHandle;

 0034: cdef class _ReaderHandle:
 0035:     """Owns a ``qwp_reader*``.
 0036: 
 0037:     ``_close()`` runs eagerly when the owning ``_CursorHandle`` is
 0038:     freed (clean drain, ``QueryResult.close()``, or consumer
 0039:     teardown); ``__dealloc__`` is the idempotent backstop. On close
 0040:     the reader either returns to its pool or is dropped,
 0041:     depending on the ``reader``'s own ownership tag (set when it
 0042:     was constructed — see ``ReaderOwnership`` in the Rust FFI):
 0043: 
 0044:     - Pool-borrowed readers go back to the pool unless
 0045:       ``_must_close`` was set, in which case the pool drops them.
 0046:     - Standalone readers (from ``reader_from_conf``) are always
 0047:       dropped.
 0048: 
 0049:     The Python side carries only one extra bit of state —
 0050:     ``_must_close`` — which it forwards to the FFI via
 0051:     ``qwp_reader_drop_on_return`` before calling close. We never
 0052:     hold a raw ``questdb_db*`` pointer here: the reader struct
 0053:     holds an ``Arc<DbInner>`` internally, so the pool stays alive
 0054:     even if the user's ``QuestDB.close()`` ran after ``query()``
 0055:     returned but before the reader closed.
 0056: 
 0057:     ``_oidc_auth`` and ``_bearer_token_provider`` retain their Python callback
 0058:     owners while this reader may reconnect, including when a result/stream
 0059:     outlives its QuestDB handle.
 0060: 
 0061:     ``_must_close`` defaults to ``True`` and is cleared only once the
 0062:     cursor is known to sit at a terminal frame on a live transport:
 0063:     by the clean-drain paths, and by ``_CursorHandle._free()`` itself
 0064:     whenever the native cursor reports its connection reusable (a
 0065:     clean end, a successful cancel, or a server-side error such as a
 0066:     parse error or a query timeout). An abandoned-mid-stream cursor
 0067:     never qualifies: the Rust Cursor::Drop closes the transport
 0068:     whenever ``cursor_active`` is still set at drop time, so recycling
 0069:     such a reader would hand the next borrower a broken pipe.
 0070:     """
 0071:     cdef qwp_reader* _reader
 0072:     cdef bint _must_close
 0073:     # Keep the Python callback target alive for as long as a reader can
 0074:     # silently refresh its native auth clone (including after QuestDB.close).
 0075:     cdef object _oidc_auth
 0076:     # Match the pool/sender holder's GC-visible ownership on PyPy.
 0077:     cdef dict __dict__
 0078: 
+0079:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_13_ReaderHandle_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_13_ReaderHandle_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_7questdb_7_client_13_ReaderHandle___cinit__(((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7_client_13_ReaderHandle___cinit__(struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._ReaderHandle.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0080:         self._reader = NULL
  __pyx_v_self->_reader = NULL;
+0081:         self._must_close = True
  __pyx_v_self->_must_close = 1;
+0082:         self._oidc_auth = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_oidc_auth);
  __Pyx_DECREF(__pyx_v_self->_oidc_auth);
  __pyx_v_self->_oidc_auth = Py_None;
+0083:         self._bearer_token_provider = None
  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, Py_None) < (0)) __PYX_ERR(2, 83, __pyx_L1_error)
 0084: 
+0085:     cdef _attach(self, qwp_reader* reader):
static PyObject *__pyx_f_7questdb_7_client_13_ReaderHandle__attach(struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_self, struct qwp_reader *__pyx_v_reader) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0086:         self._reader = reader
  __pyx_v_self->_reader = __pyx_v_reader;
 0087: 
+0088:     cdef void _close(self, bint dealloc=False) noexcept:
static void __pyx_f_7questdb_7_client_13_ReaderHandle__close(struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_self, struct __pyx_opt_args_7questdb_7_client_13_ReaderHandle__close *__pyx_optional_args) {
  int __pyx_v_dealloc = ((int)0);
  PyThreadState *__pyx_v_gs;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dealloc = __pyx_optional_args->dealloc;
    }
  }
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("questdb._client._ReaderHandle._close", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_7questdb_7_client_13_ReaderHandle__close {
  int __pyx_n;
  int dealloc;
};
+0089:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
+0090:         if self._reader == NULL:
  __pyx_t_1 = (__pyx_v_self->_reader == NULL);
  if (__pyx_t_1) {
/* … */
  }
+0091:             return
    goto __pyx_L0;
+0092:         if self._must_close:
  if (__pyx_v_self->_must_close) {
/* … */
  }
+0093:             qwp_reader_drop_on_return(self._reader)
    qwp_reader_drop_on_return(__pyx_v_self->_reader);
+0094:         _ensure_doesnt_have_gil(&gs)
  (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+0095:         qwp_reader_close(self._reader)
  qwp_reader_close(__pyx_v_self->_reader);
+0096:         _ensure_has_gil(&gs)
  __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+0097:         self._reader = NULL
  __pyx_v_self->_reader = NULL;
+0098:         self._oidc_auth = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_oidc_auth);
  __Pyx_DECREF(__pyx_v_self->_oidc_auth);
  __pyx_v_self->_oidc_auth = Py_None;
 0099:         # Leave dictionary cleanup to Cython/PyPy during __dealloc__: normal
 0100:         # attribute access would recreate the dying PyPy wrapper.
+0101:         if not dealloc:
  __pyx_t_1 = (!__pyx_v_dealloc);
  if (__pyx_t_1) {
/* … */
  }
+0102:             self._bearer_token_provider = None
    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_bearer_token_provider, Py_None) < (0)) __PYX_ERR(2, 102, __pyx_L1_error)
 0103: 
+0104:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_13_ReaderHandle_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_13_ReaderHandle_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_7questdb_7_client_13_ReaderHandle_2__dealloc__(((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_7questdb_7_client_13_ReaderHandle_2__dealloc__(struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_self) {
/* … */
  /* function exit code */
}
+0105:         self._close(dealloc=True)
  __pyx_t_1.__pyx_n = 1;
  __pyx_t_1.dealloc = 1;
  ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self, &__pyx_t_1); 
 0106: 
 0107: 
+0108: @cython.no_gc_clear
struct __pyx_obj_7questdb_7_client__CursorHandle {
  PyObject_HEAD
  struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *__pyx_vtab;
  struct qwp_reader_cursor *_cursor;
  struct qwp_reader_batch const *_pending_batch;
  struct __pyx_obj_7questdb_7_client__ReaderHandle *_reader_ref;
  int _owns_reader;
  PyObject *_lock;
  int _reset_seq;
  int _native_in_flight;
  int _pinned;
  int _free_pending;
  int _cancelled;
  int _rows_cut_short;
  int _exec_done_valid;
  uint8_t _exec_done_op_type;
  uint64_t _exec_done_rows;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client__CursorHandle {
  __pyx_t_7questdb_7_client_void_int (*_check_not_driving)(struct __pyx_obj_7questdb_7_client__CursorHandle *, PyObject *, struct __pyx_opt_args_7questdb_7_client_13_CursorHandle__check_not_driving *__pyx_optional_args);
  void (*_attach)(struct __pyx_obj_7questdb_7_client__CursorHandle *, struct qwp_reader_cursor *, struct __pyx_obj_7questdb_7_client__ReaderHandle *, int);
  int (*_is_live)(struct __pyx_obj_7questdb_7_client__CursorHandle *);
  int (*_reset_sequence)(struct __pyx_obj_7questdb_7_client__CursorHandle *);
  void (*_free_locked)(struct __pyx_obj_7questdb_7_client__CursorHandle *);
  void (*_mark_drained)(struct __pyx_obj_7questdb_7_client__CursorHandle *);
  void (*_pin)(struct __pyx_obj_7questdb_7_client__CursorHandle *);
  void (*_unpin)(struct __pyx_obj_7questdb_7_client__CursorHandle *);
  int (*_close)(struct __pyx_obj_7questdb_7_client__CursorHandle *);
  void (*_free)(struct __pyx_obj_7questdb_7_client__CursorHandle *);
  int (*_try_reclaim)(struct __pyx_obj_7questdb_7_client__CursorHandle *);
};
static struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *__pyx_vtabptr_7questdb_7_client__CursorHandle;

 0109: cdef class _CursorHandle:
 0110:     """Owns a ``qwp_reader_cursor*`` + back-ref to its reader.
 0111: 
 0112:     The re-entrant lock is the publication boundary for every native
 0113:     cursor field. It serialises cursor operations, close, Arrow consumer
 0114:     callbacks, and cross-thread GC finalisation, and supplies the
 0115:     happens-before edge required when those operations move between
 0116:     threads. Concurrent public operations are still unsupported.
 0117: 
 0118:     Being re-entrant, the lock does not protect a decoder from code
 0119:     running on its *own* thread: a cyclic-GC finaliser (a
 0120:     ``PooledReader`` reachable only through a cycle, collected while a
 0121:     per-cell constructor runs) or a signal handler re-acquires it freely.
 0122:     The decoders therefore ``_pin()`` the handle while they hold pointers
 0123:     into the current batch. The public ``close()`` and ``cancel()`` and
 0124:     the batch pulls refuse such re-entry (``_check_not_driving``); a free
 0125:     requested while pinned -- by a finaliser's ``_try_reclaim()`` or by
 0126:     ``_free()`` -- is deferred to ``_unpin()``. Neither pulls the batch out
 0127:     from under the decoder.
 0128:     Every locked network call is pinned too, so a close whose lock wait
 0129:     was interrupted (Ctrl-C while another thread holds the lock) is
 0130:     finished by that thread once its current call returns.
 0131: 
 0132:     ``_pending_batch`` is the row stream's first batch, left undecoded on
 0133:     the cursor between ``_open_row_stream`` and the iterator's first step.
 0134:     Every call that invalidates it (free, cancel) clears it under the lock.
 0135: 
 0136:     ``_close()`` releases both: the cursor is freed and the reader closed
 0137:     (returned to its pool or dropped) in the same locked section;
 0138:     ``_free()`` is its non-raising form. The
 0139:     drain / close / consumer-teardown paths call it eagerly;
 0140:     ``__dealloc__`` is the backstop. Before freeing, it asks the native
 0141:     cursor whether its connection is reusable — at a terminal frame on
 0142:     a live transport — and clears ``_reader_ref._must_close`` when so.
 0143:     That covers clean drains, successful cancels and server-side error
 0144:     terminals alike; a cursor abandoned mid-stream stays unrecyclable.
 0145: 
 0146:     ``_owns_reader`` selects who releases the reader. The one-shot
 0147:     ``QuestDB.query(sql)`` path leaves it ``True``: the cursor is the
 0148:     reader's sole owner, so ``_free()`` closes the reader eagerly. A
 0149:     ``PooledReader`` lease sets it ``False``: the lease keeps its
 0150:     reader across queries, so ``_free()`` releases only the cursor and
 0151:     drops the back-reference. A lease released while its cursor's free
 0152:     is deferred hands the reader to that cursor.
 0153: 
 0154:     ``_reset_seq`` counts mid-query failover resets. The
 0155:     ``_failover_reset_trampoline`` installed on the materialise-whole
 0156:     query path bumps it (a plain C-field write, no GIL, no FFI, no
 0157:     exception — honouring the reader's reentrancy contract) when the
 0158:     cursor re-executes the query on a new endpoint. The accumulating
 0159:     reader (``_numpy_frame_from_cursor`` etc.) compares it against the
 0160:     sequence it observed at start-of-stream and, when it advanced,
 0161:     discards every batch buffered so far so the replay-from-batch-0
 0162:     yields a correct whole result.
 0163:     """
 0164:     cdef qwp_reader_cursor* _cursor
 0165:     cdef const qwp_reader_batch* _pending_batch
 0166:     cdef _ReaderHandle _reader_ref
 0167:     cdef bint _owns_reader
 0168:     cdef object _lock
 0169:     cdef int _reset_seq
 0170:     # The RLock does not prevent same-thread re-entry, e.g. from a finalizer
 0171:     # or callback that runs on this thread mid-operation. Set and cleared
 0172:     # only with `_lock` held; `_check_not_driving` relies on that.
 0173:     cdef bint _native_in_flight
 0174:     cdef int _pinned
 0175:     cdef bint _free_pending
 0176:     cdef bint _cancelled
 0177:     cdef bint _rows_cut_short
 0178:     cdef bint _exec_done_valid
 0179:     cdef uint8_t _exec_done_op_type
 0180:     cdef uint64_t _exec_done_rows
 0181: 
+0182:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_13_CursorHandle_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_13_CursorHandle_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_7questdb_7_client_13_CursorHandle___cinit__(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7_client_13_CursorHandle___cinit__(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._CursorHandle.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0183:         self._cursor = NULL
  __pyx_v_self->_cursor = NULL;
+0184:         self._pending_batch = NULL
  __pyx_v_self->_pending_batch = NULL;
+0185:         self._reader_ref = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader_ref);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_reader_ref);
  __pyx_v_self->_reader_ref = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None);
+0186:         self._owns_reader = True
  __pyx_v_self->_owns_reader = 1;
+0187:         self._lock = threading.RLock()
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_threading); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_RLock); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_lock);
  __Pyx_DECREF(__pyx_v_self->_lock);
  __pyx_v_self->_lock = __pyx_t_1;
  __pyx_t_1 = 0;
+0188:         self._reset_seq = 0
  __pyx_v_self->_reset_seq = 0;
+0189:         self._native_in_flight = False
  __pyx_v_self->_native_in_flight = 0;
+0190:         self._pinned = 0
  __pyx_v_self->_pinned = 0;
+0191:         self._free_pending = False
  __pyx_v_self->_free_pending = 0;
+0192:         self._cancelled = False
  __pyx_v_self->_cancelled = 0;
+0193:         self._rows_cut_short = False
  __pyx_v_self->_rows_cut_short = 0;
+0194:         self._exec_done_valid = False
  __pyx_v_self->_exec_done_valid = 0;
+0195:         self._exec_done_op_type = 0
  __pyx_v_self->_exec_done_op_type = 0;
+0196:         self._exec_done_rows = 0
  __pyx_v_self->_exec_done_rows = 0;
 0197: 
+0198:     cdef void_int _check_not_driving(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client_13_CursorHandle__check_not_driving(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self, PyObject *__pyx_v_method, struct __pyx_opt_args_7questdb_7_client_13_CursorHandle__check_not_driving *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._CursorHandle._check_not_driving", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client_13_CursorHandle__check_not_driving {
  int __pyx_n;
  int check_lock;
};
+0199:             self, str method, bint check_lock=False) except -1:
  int __pyx_v_check_lock = ((int)0);
  __pyx_t_7questdb_7_client_void_int __pyx_r;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_check_lock = __pyx_optional_args->check_lock;
    }
  }
 0200:         # Refuse only the thread driving this cursor: a finalizer, signal
 0201:         # handler or callback that runs there mid-decode or mid-read. Another
 0202:         # thread waits for `_lock` instead, as `_close()` always let it.
 0203:         # `_native_in_flight` changes only under the lock, so only its owner
 0204:         # can be driving: at entry (`check_lock`) ownership is the test, and
 0205:         # under the lock the flag is. Under-lock checks must leave check_lock
 0206:         # false.
+0207:         if (check_lock or self._native_in_flight) and self._lock._is_owned():
  if (!__pyx_v_check_lock) {
  } else {
    goto __pyx_L5_next_and;
  }
  if (__pyx_v_self->_native_in_flight) {
  } else {
    __pyx_t_1 = __pyx_v_self->_native_in_flight;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_L5_next_and:;
  __pyx_t_3 = __pyx_v_self->_lock;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_owned, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 207, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(2, 207, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0208:             raise QuestDBError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 208, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
+0209:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 209, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 209, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+0210:                 f'{method}() cannot be called during a cursor operation.')
    __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_method); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 210, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_cannot_be_called_during_a_curso); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 210, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_4 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_4 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_8, __pyx_t_9};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 208, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 208, __pyx_L1_error)
 0211: 
+0212:     cdef void _attach(
static void __pyx_f_7questdb_7_client_13_CursorHandle__attach(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self, struct qwp_reader_cursor *__pyx_v_cursor, struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader_ref, int __pyx_v_owns_reader) {
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 0213:             self,
 0214:             qwp_reader_cursor* cursor,
 0215:             _ReaderHandle reader_ref,
 0216:             bint owns_reader) noexcept:
 0217:         # The handle is new and has not been published yet, so adopting the
 0218:         # cursor needs no lock and must not introduce a failure point.
+0219:         self._cursor = cursor
  __pyx_v_self->_cursor = __pyx_v_cursor;
+0220:         self._reader_ref = reader_ref
  __Pyx_INCREF((PyObject *)__pyx_v_reader_ref);
  __Pyx_GIVEREF((PyObject *)__pyx_v_reader_ref);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader_ref);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_reader_ref);
  __pyx_v_self->_reader_ref = __pyx_v_reader_ref;
+0221:         self._owns_reader = owns_reader
  __pyx_v_self->_owns_reader = __pyx_v_owns_reader;
 0222: 
+0223:     cdef bint _is_live(self):
static int __pyx_f_7questdb_7_client_13_CursorHandle__is_live(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._CursorHandle._is_live", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0224:         with self._lock:
  /*with:*/ {
    __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 224, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 224, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __pyx_L11_try_return:;
        goto __pyx_L4_return;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_1) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 224, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L4_return: {
        __pyx_t_9 = __pyx_r;
        if (__pyx_t_1) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 224, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __pyx_r = __pyx_t_9;
        goto __pyx_L0;
      }
      __pyx_L6:;
    }
    goto __pyx_L13;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L13:;
  }
+0225:             return self._cursor != NULL
          __pyx_r = (__pyx_v_self->_cursor != NULL);
          goto __pyx_L11_try_return;
 0226: 
+0227:     cdef int _reset_sequence(self):
static int __pyx_f_7questdb_7_client_13_CursorHandle__reset_sequence(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._CursorHandle._reset_sequence", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0228:         with self._lock:
  /*with:*/ {
    __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 228, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 228, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 228, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __pyx_L11_try_return:;
        goto __pyx_L4_return;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_1) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 228, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L4_return: {
        __pyx_t_9 = __pyx_r;
        if (__pyx_t_1) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 228, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __pyx_r = __pyx_t_9;
        goto __pyx_L0;
      }
      __pyx_L6:;
    }
    goto __pyx_L13;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L13:;
  }
+0229:             return self._reset_seq
          __pyx_r = __pyx_v_self->_reset_seq;
          goto __pyx_L11_try_return;
 0230: 
+0231:     cdef void _free_locked(self) noexcept:
static void __pyx_f_7questdb_7_client_13_CursorHandle__free_locked(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self) {
  PyThreadState *__pyx_v_gs;
  struct qwp_reader_cursor *__pyx_v_cursor;
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 0232:         """The body of `_close`. Caller must hold `_lock` and have checked
 0233:         that the handle is not pinned."""
+0234:         cdef PyThreadState* gs = NULL
  __pyx_v_gs = NULL;
 0235:         cdef qwp_reader_cursor* cursor
+0236:         if self._native_in_flight:
  if (__pyx_v_self->_native_in_flight) {
/* … */
  }
+0237:             return
    goto __pyx_L0;
+0238:         self._native_in_flight = True
  __pyx_v_self->_native_in_flight = 1;
+0239:         try:
  /*try:*/ {
+0240:             cursor = self._cursor
    __pyx_t_1 = __pyx_v_self->_cursor;
    __pyx_v_cursor = __pyx_t_1;
+0241:             if cursor != NULL:
    __pyx_t_2 = (__pyx_v_cursor != NULL);
    if (__pyx_t_2) {
/* … */
    }
+0242:                 if qwp_reader_cursor_connection_reusable(cursor):
      __pyx_t_2 = qwp_reader_cursor_connection_reusable(__pyx_v_cursor);
      if (__pyx_t_2) {
/* … */
      }
+0243:                     self._mark_drained()
        ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->__pyx_vtab)->_mark_drained(__pyx_v_self);
+0244:                 self._cursor = NULL
      __pyx_v_self->_cursor = NULL;
+0245:                 self._pending_batch = NULL
      __pyx_v_self->_pending_batch = NULL;
+0246:                 _ensure_doesnt_have_gil(&gs)
      (void)(__pyx_f_7questdb_7_client__ensure_doesnt_have_gil((&__pyx_v_gs)));
+0247:                 qwp_reader_cursor_free(cursor)
      qwp_reader_cursor_free(__pyx_v_cursor);
+0248:                 _ensure_has_gil(&gs)
      __pyx_f_7questdb_7_client__ensure_has_gil((&__pyx_v_gs));
+0249:             if self._reader_ref is not None:
    __pyx_t_2 = (((PyObject *)__pyx_v_self->_reader_ref) != Py_None);
    if (__pyx_t_2) {
/* … */
    }
  }
+0250:                 if self._owns_reader:
      if (__pyx_v_self->_owns_reader) {
/* … */
      }
+0251:                     self._reader_ref._close()
        ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_self->_reader_ref->__pyx_vtab)->_close(__pyx_v_self->_reader_ref, NULL);
+0252:                 self._reader_ref = None
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF((PyObject *)__pyx_v_self->_reader_ref);
      __Pyx_DECREF((PyObject *)__pyx_v_self->_reader_ref);
      __pyx_v_self->_reader_ref = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)Py_None);
 0253:         finally:
+0254:             self._native_in_flight = False
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_v_self->_native_in_flight = 0;
      goto __pyx_L6;
    }
    __pyx_L6:;
  }
 0255: 
+0256:     cdef void _mark_drained(self) noexcept:
static void __pyx_f_7questdb_7_client_13_CursorHandle__mark_drained(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self) {
  uint8_t __pyx_v_op_type;
  uint64_t __pyx_v_rows_affected;
/* … */
  /* function exit code */
}
 0257:         # Only valid once the cursor sits at its terminal frame: the Rust
 0258:         # `Cursor::Drop` tears the transport down whenever `cursor_active`
 0259:         # is still set, so recycling earlier would hand the next borrower a
 0260:         # broken pipe. The EXEC_DONE report is latched here because every
 0261:         # drain path frees the cursor immediately afterwards.
+0262:         cdef uint8_t op_type = 0
  __pyx_v_op_type = 0;
+0263:         cdef uint64_t rows_affected = 0
  __pyx_v_rows_affected = 0;
+0264:         if self._reader_ref is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_reader_ref) != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0265:             self._reader_ref._must_close = False
    __pyx_v_self->_reader_ref->_must_close = 0;
+0266:         if self._cursor != NULL and not self._exec_done_valid:
  __pyx_t_2 = (__pyx_v_self->_cursor != NULL);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_2 = (!__pyx_v_self->_exec_done_valid);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0267:             if qwp_reader_cursor_terminal_exec_done(
    __pyx_t_1 = qwp_reader_cursor_terminal_exec_done(__pyx_v_self->_cursor, (&__pyx_v_op_type), (&__pyx_v_rows_affected));
    if (__pyx_t_1) {
/* … */
    }
 0268:                     self._cursor, &op_type, &rows_affected):
+0269:                 self._exec_done_op_type = op_type
      __pyx_v_self->_exec_done_op_type = __pyx_v_op_type;
+0270:                 self._exec_done_rows = (
      __pyx_v_self->_exec_done_rows = __pyx_t_3;
+0271:                     0 if rows_affected == QWP_READER_ROWS_AFFECTED_UNKNOWN
      __pyx_t_1 = (__pyx_v_rows_affected == QWP_READER_ROWS_AFFECTED_UNKNOWN);
      if (__pyx_t_1) {
        __pyx_t_3 = 0;
      } else {
+0272:                     else rows_affected)
        __pyx_t_3 = __pyx_v_rows_affected;
      }
+0273:                 self._exec_done_valid = True
      __pyx_v_self->_exec_done_valid = 1;
 0274: 
+0275:     cdef void _pin(self) noexcept:
static void __pyx_f_7questdb_7_client_13_CursorHandle__pin(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self) {
/* … */
  /* function exit code */
}
 0276:         # Called under `_lock` around a native call or a batch decode; until
 0277:         # the matching `_unpin`, a free is deferred (see the class
 0278:         # docstring).
+0279:         self._pinned += 1
  __pyx_v_self->_pinned = (__pyx_v_self->_pinned + 1);
 0280: 
+0281:     cdef void _unpin(self) noexcept:
static void __pyx_f_7questdb_7_client_13_CursorHandle__unpin(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self) {
/* … */
  /* function exit code */
}
+0282:         self._pinned -= 1
  __pyx_v_self->_pinned = (__pyx_v_self->_pinned - 1);
+0283:         if self._pinned == 0 and self._free_pending:
  __pyx_t_2 = (__pyx_v_self->_pinned == 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_1 = __pyx_v_self->_free_pending;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+0284:             self._free_pending = False
    __pyx_v_self->_free_pending = 0;
+0285:             self._free()
    ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->__pyx_vtab)->_free(__pyx_v_self);
 0286: 
+0287:     cdef int _close(self) except -1:
static int __pyx_f_7questdb_7_client_13_CursorHandle__close(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._CursorHandle._close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0288:         # An interrupted acquire (Ctrl-C while another thread holds the lock
 0289:         # in a network read) leaves the free to that thread's next `_unpin`.
+0290:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+0291:             self._lock.acquire()
      __pyx_t_5 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_6 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 291, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0292:         except BaseException:
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_7) {
      __Pyx_AddTraceback("questdb._client._CursorHandle._close", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_8) < 0) __PYX_ERR(2, 292, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_8);
+0293:             self._free_pending = True
      __pyx_v_self->_free_pending = 1;
+0294:             raise
      __Pyx_GIVEREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_5, __pyx_t_8);
      __pyx_t_4 = 0;  __pyx_t_5 = 0;  __pyx_t_8 = 0; 
      __PYX_ERR(2, 294, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
+0295:         try:
  /*try:*/ {
+0296:             if self._pinned > 0:
    __pyx_t_9 = (__pyx_v_self->_pinned > 0);
    if (__pyx_t_9) {
/* … */
      goto __pyx_L14;
    }
 0297:                 # Same-thread re-entry mid-decode; `_unpin` finishes it.
+0298:                 self._free_pending = True
      __pyx_v_self->_free_pending = 1;
 0299:             else:
+0300:                 self._free_locked()
    /*else*/ {
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->__pyx_vtab)->_free_locked(__pyx_v_self);
    }
    __pyx_L14:;
  }
 0301:         finally:
+0302:             self._lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_5 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_6 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
        __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 302, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L13;
    }
    __pyx_L13:;
  }
+0303:         return 0
  __pyx_r = 0;
  goto __pyx_L0;
 0304: 
+0305:     cdef void _free(self) noexcept:
static void __pyx_f_7questdb_7_client_13_CursorHandle__free(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self) {
  PyObject *__pyx_v_exc_type;
  PyObject *__pyx_v_exc_value;
  PyObject *__pyx_v_exc_tb;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_WriteUnraisable("questdb._client._CursorHandle._free", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
+0306:         cdef PyObject* exc_type = NULL
  __pyx_v_exc_type = NULL;
+0307:         cdef PyObject* exc_value = NULL
  __pyx_v_exc_value = NULL;
+0308:         cdef PyObject* exc_tb = NULL
  __pyx_v_exc_tb = NULL;
 0309:         # Capsule teardown can run with an exception pending; clear it
 0310:         # while acquiring the lock, then restore the caller's exception.
 0311:         # `_reclaim_cursor_no_wait` does the same for the finalizers.
+0312:         PyErr_Fetch(&exc_type, &exc_value, &exc_tb)
  PyErr_Fetch((&__pyx_v_exc_type), (&__pyx_v_exc_value), (&__pyx_v_exc_tb));
+0313:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }
+0314:             self._close()
      __pyx_t_4 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->__pyx_vtab)->_close(__pyx_v_self); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 314, __pyx_L3_error)
+0315:         except KeyboardInterrupt:
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyboardInterrupt))));
    if (__pyx_t_4) {
      __Pyx_AddTraceback("questdb._client._CursorHandle._free", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 315, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
+0316:             if exc_type == NULL:
      __pyx_t_8 = (__pyx_v_exc_type == NULL);
      if (__pyx_t_8) {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }
+0317:                 _rearm_interrupt()
        __pyx_f_7questdb_7_client__rearm_interrupt();
+0318:         except BaseException:
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_4) {
      __Pyx_AddTraceback("questdb._client._CursorHandle._free", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(2, 318, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
+0319:             if exc_type == NULL:
      __pyx_t_8 = (__pyx_v_exc_type == NULL);
      if (unlikely(__pyx_t_8)) {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
+0320:                 raise
        __Pyx_GIVEREF(__pyx_t_7);
        __Pyx_GIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_5);
        __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_6, __pyx_t_5);
        __pyx_t_7 = 0;  __pyx_t_6 = 0;  __pyx_t_5 = 0; 
        __PYX_ERR(2, 320, __pyx_L5_except_error)
+0321:         PyErr_Restore(exc_type, exc_value, exc_tb)
  PyErr_Restore(__pyx_v_exc_type, __pyx_v_exc_value, __pyx_v_exc_tb);
 0322: 
+0323:     cdef int _try_reclaim(self):
static int __pyx_f_7questdb_7_client_13_CursorHandle__try_reclaim(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self) {
  int __pyx_v_undrained;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._CursorHandle._try_reclaim", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0324:         """Free from a finalizer without ever blocking.
 0325: 
 0326:         `_free` holds `_lock` across `qwp_reader_cursor_free` and
 0327:         `_ReaderHandle._close`, both of which release the GIL. A worker parked
 0328:         in one of those at interpreter finalization is frozen there holding the
 0329:         lock, and a blocking acquire from the shutdown GC -- which runs
 0330:         finalizers with the GIL held -- would then never return, hanging the
 0331:         interpreter. Cursor owners can be handed to another thread, so every
 0332:         finalizer and GC-triggered release path must use this non-blocking form.
 0333: 
 0334:         Returns 1 when it freed an un-drained cursor (the caller should warn),
 0335:         0 when it freed a drained one or there was nothing to free, and -1 when
 0336:         the lock was busy and it did nothing. The lock holder need not be a
 0337:         freeing operation; ``__dealloc__`` remains the eventual fallback.
 0338: 
 0339:         "Busy" includes a lock held by the calling thread itself. The lock is
 0340:         re-entrant, so a plain non-blocking acquire succeeds there -- and the
 0341:         holder may be a decoder on this very thread reading the cursor's
 0342:         borrowed batch buffers (``_NumpyBatchIter.__next__``,
 0343:         ``_numpy_frame_from_cursor``) when the cyclic GC collects the lease
 0344:         that owns this cursor. Freeing the cursor then left the decoder
 0345:         reading freed memory.
 0346: 
 0347:         A busy handle that a decoder or native call has pinned does not
 0348:         drop the free, though: it is left to that holder's ``_unpin()``, as
 0349:         ``_close()`` leaves it, so a lease collected mid-decode still ends
 0350:         the stream once the decoder lets go of the batch. The return value
 0351:         is -1 all the same; the caller must not touch the cursor.
 0352:         """
 0353:         cdef bint undrained
+0354:         if (self._native_in_flight
  if (!__pyx_v_self->_native_in_flight) {
  } else {
    __pyx_t_1 = __pyx_v_self->_native_in_flight;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  if (__pyx_t_1) {
/* … */
  }
+0355:                 or self._lock._is_owned()
  __pyx_t_3 = __pyx_v_self->_lock;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_owned, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(2, 355, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
+0356:                 or not self._lock.acquire(False)):
  __pyx_t_3 = __pyx_v_self->_lock;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, Py_False};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_acquire, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 356, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(2, 356, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = (!__pyx_t_5);
  __pyx_t_1 = __pyx_t_6;
  __pyx_L4_bool_binop_done:;
+0357:             if self._pinned > 0:
    __pyx_t_1 = (__pyx_v_self->_pinned > 0);
    if (__pyx_t_1) {
/* … */
    }
+0358:                 self._free_pending = True
      __pyx_v_self->_free_pending = 1;
+0359:             return -1
    __pyx_r = -1;
    goto __pyx_L0;
+0360:         try:
  /*try:*/ {
+0361:             if self._native_in_flight:
    if (__pyx_v_self->_native_in_flight) {
/* … */
    }
+0362:                 return -1
      __pyx_r = -1;
      goto __pyx_L8_return;
+0363:             if self._cursor == NULL:
    __pyx_t_1 = (__pyx_v_self->_cursor == NULL);
    if (__pyx_t_1) {
/* … */
    }
+0364:                 return 0
      __pyx_r = 0;
      goto __pyx_L8_return;
 0365:             undrained = (
+0366:                 self._reader_ref is None or self._reader_ref._must_close)
    __pyx_t_6 = (((PyObject *)__pyx_v_self->_reader_ref) == Py_None);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_1 = __pyx_t_6;
      goto __pyx_L13_bool_binop_done;
    }
    __pyx_t_1 = __pyx_v_self->_reader_ref->_must_close;
    __pyx_L13_bool_binop_done:;
    __pyx_v_undrained = __pyx_t_1;
+0367:             self._free_locked()
    ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->__pyx_vtab)->_free_locked(__pyx_v_self);
  }
 0368:         finally:
+0369:             self._lock.release()
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_3 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_4 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L10;
    }
    __pyx_L8_return: {
      __pyx_t_7 = __pyx_r;
      __pyx_t_3 = __pyx_v_self->_lock;
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_4 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_release, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = __pyx_t_7;
      goto __pyx_L0;
    }
    __pyx_L10:;
  }
+0370:         return 1 if undrained else 0
  if (__pyx_v_undrained) {
    __pyx_t_7 = 1;
  } else {
    __pyx_t_7 = 0;
  }
  __pyx_r = __pyx_t_7;
  goto __pyx_L0;
 0371: 
+0372:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_13_CursorHandle_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_13_CursorHandle_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_7questdb_7_client_13_CursorHandle_2__dealloc__(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_7questdb_7_client_13_CursorHandle_2__dealloc__(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_self) {
/* … */
  /* function exit code */
}
+0373:         self._free()
  ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->__pyx_vtab)->_free(__pyx_v_self);
 0374: 
 0375: 
+0376: cdef void _rearm_interrupt() noexcept:
static void __pyx_f_7questdb_7_client__rearm_interrupt(void) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_WriteUnraisable("questdb._client._rearm_interrupt", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
+0377:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }
+0378:         _thread.interrupt_main()
      __pyx_t_5 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_thread); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 378, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_interrupt_main); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 378, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_8 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_5);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_8 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 378, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0379:     except BaseException:
    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_9) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
 0380:         pass
 0381: 
 0382: 
+0383: cdef void _reclaim_cursor_no_wait(_CursorHandle handle) noexcept:
static void __pyx_f_7questdb_7_client__reclaim_cursor_no_wait(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle) {
  PyObject *__pyx_v_exc_type;
  PyObject *__pyx_v_exc_value;
  PyObject *__pyx_v_exc_tb;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("questdb._client._reclaim_cursor_no_wait", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 0384:     """Best-effort cursor cleanup for GC and foreign release callbacks.
 0385: 
 0386:     A busy handle necessarily remains owned by the operation holding its lock;
 0387:     that owner performs the eventual `_CursorHandle.__dealloc__` fallback after
 0388:     releasing the lock. Finalizers must not wait for it, especially while the
 0389:     interpreter is stopping and worker threads can no longer make progress.
 0390:     """
+0391:     cdef PyObject* exc_type = NULL
  __pyx_v_exc_type = NULL;
+0392:     cdef PyObject* exc_value = NULL
  __pyx_v_exc_value = NULL;
+0393:     cdef PyObject* exc_tb = NULL
  __pyx_v_exc_tb = NULL;
+0394:     if handle is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_handle) == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0395:         return
    goto __pyx_L0;
 0396:     # A stream release can run while its caller unwinds an exception
 0397:     # (pyarrow drops its reader, Cython drops a capsule local). Set that
 0398:     # exception aside: the lock calls in `_try_reclaim` fail while one is
 0399:     # pending, which would lose the exception and could leave the lock held.
+0400:     PyErr_Fetch(&exc_type, &exc_value, &exc_tb)
  PyErr_Fetch((&__pyx_v_exc_type), (&__pyx_v_exc_value), (&__pyx_v_exc_tb));
+0401:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
/* … */
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L5_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L9_try_end:;
  }
+0402:         handle._try_reclaim()
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_try_reclaim(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 402, __pyx_L4_error)
+0403:     except BaseException:
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_5) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L5_exception_handled;
    }
    goto __pyx_L6_except_error;
 0404:         # Finalizers and Arrow release callbacks cannot propagate. The handle's
 0405:         # owning operation still retains it and supplies the eventual fallback.
 0406:         pass
+0407:     PyErr_Restore(exc_type, exc_value, exc_tb)
  PyErr_Restore(__pyx_v_exc_type, __pyx_v_exc_value, __pyx_v_exc_tb);
 0408: 
 0409: 
+0410: def _debug_new_cursor_handle():
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_59_debug_new_cursor_handle(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_58_debug_new_cursor_handle, "Internal test seam: an empty handle is sufficient to test lock policy.");
static PyMethodDef __pyx_mdef_7questdb_7_client_59_debug_new_cursor_handle = {"_debug_new_cursor_handle", (PyCFunction)__pyx_pw_7questdb_7_client_59_debug_new_cursor_handle, METH_NOARGS, __pyx_doc_7questdb_7_client_58_debug_new_cursor_handle};
static PyObject *__pyx_pw_7questdb_7_client_59_debug_new_cursor_handle(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_new_cursor_handle (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_58_debug_new_cursor_handle(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_58_debug_new_cursor_handle(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._debug_new_cursor_handle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_59_debug_new_cursor_handle, 0, __pyx_mstate_global->__pyx_n_u_debug_new_cursor_handle, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[71])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 410, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_new_cursor_handle, __pyx_t_18) < (0)) __PYX_ERR(2, 410, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0411:     """Internal test seam: an empty handle is sufficient to test lock policy."""
+0412:     return _CursorHandle()
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 412, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_r = ((PyObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 0413: 
 0414: 
+0415: def _debug_hold_cursor_handle_lock(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_61_debug_hold_cursor_handle_lock(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_61_debug_hold_cursor_handle_lock = {"_debug_hold_cursor_handle_lock", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_61_debug_hold_cursor_handle_lock, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_61_debug_hold_cursor_handle_lock(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  PyObject *__pyx_v_entered = 0;
  PyObject *__pyx_v_release = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_hold_cursor_handle_lock (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_handle,&__pyx_mstate_global->__pyx_n_u_entered,&__pyx_mstate_global->__pyx_n_u_release,0};
  PyObject* values[3] = {0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 415, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 415, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 415, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 415, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_hold_cursor_handle_lock", 0) < (0)) __PYX_ERR(2, 415, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_hold_cursor_handle_lock", 1, 3, 3, i); __PYX_ERR(2, 415, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 415, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 415, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 415, __pyx_L3_error)
    }
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)values[0]);
    __pyx_v_entered = values[1];
    __pyx_v_release = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_hold_cursor_handle_lock", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 415, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_hold_cursor_handle_lock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_handle), __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle, 1, "handle", 0))) __PYX_ERR(2, 416, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_60_debug_hold_cursor_handle_lock(__pyx_self, __pyx_v_handle, __pyx_v_entered, __pyx_v_release);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_60_debug_hold_cursor_handle_lock(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle, PyObject *__pyx_v_entered, PyObject *__pyx_v_release) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._debug_hold_cursor_handle_lock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_61_debug_hold_cursor_handle_lock, 0, __pyx_mstate_global->__pyx_n_u_debug_hold_cursor_handle_lock, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[72])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 415, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_hold_cursor_handle_lock, __pyx_t_18) < (0)) __PYX_ERR(2, 415, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 0416:         _CursorHandle handle, object entered, object release):
+0417:     with handle._lock:
  /*with:*/ {
    __pyx_t_1 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 417, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 417, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L12_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client._debug_hold_cursor_handle_lock", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(2, 417, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_2);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_3);
          __pyx_t_9 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 417, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 417, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_11 < (0)) __PYX_ERR(2, 417, __pyx_L9_except_error)
          __pyx_t_12 = (!__pyx_t_11);
          if (unlikely(__pyx_t_12)) {
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_XGIVEREF(__pyx_t_3);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_3);
            __pyx_t_2 = 0;  __pyx_t_4 = 0;  __pyx_t_3 = 0; 
            __PYX_ERR(2, 417, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L12_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_1) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 417, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L16;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L1_error;
    __pyx_L16:;
  }
+0418:         entered.set()
          __pyx_t_4 = __pyx_v_entered;
          __Pyx_INCREF(__pyx_t_4);
          __pyx_t_5 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
            __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_set, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 418, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0419:         release.wait()
          __pyx_t_4 = __pyx_v_release;
          __Pyx_INCREF(__pyx_t_4);
          __pyx_t_5 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
            __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_wait, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 419, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
          }
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0420: 
 0421: 
+0422: def _debug_try_reclaim_cursor_handle(_CursorHandle handle):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_63_debug_try_reclaim_cursor_handle(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_63_debug_try_reclaim_cursor_handle = {"_debug_try_reclaim_cursor_handle", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_63_debug_try_reclaim_cursor_handle, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_63_debug_try_reclaim_cursor_handle(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_try_reclaim_cursor_handle (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_handle,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 422, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 422, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_try_reclaim_cursor_handle", 0) < (0)) __PYX_ERR(2, 422, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_try_reclaim_cursor_handle", 1, 1, 1, i); __PYX_ERR(2, 422, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 422, __pyx_L3_error)
    }
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_try_reclaim_cursor_handle", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 422, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_try_reclaim_cursor_handle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_handle), __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle, 1, "handle", 0))) __PYX_ERR(2, 422, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_62_debug_try_reclaim_cursor_handle(__pyx_self, __pyx_v_handle);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_62_debug_try_reclaim_cursor_handle(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._debug_try_reclaim_cursor_handle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_63_debug_try_reclaim_cursor_handle, 0, __pyx_mstate_global->__pyx_n_u_debug_try_reclaim_cursor_handle, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[73])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_try_reclaim_cursor_handle, __pyx_t_18) < (0)) __PYX_ERR(2, 422, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+0423:     return handle._try_reclaim()
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_try_reclaim(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 423, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0424: 
 0425: 
+0426: cdef object _fetch_one_batch(
static PyObject *__pyx_f_7questdb_7_client__fetch_one_batch(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle, PyObject *__pyx_v_pa_module, struct __pyx_opt_args_7questdb_7_client__fetch_one_batch *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("questdb._client._fetch_one_batch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_batch);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client__fetch_one_batch {
  int __pyx_n;
  int compact;
};
+0427:         _CursorHandle handle, object pa_module, bint compact=False):
  int __pyx_v_compact = ((int)0);
  struct ArrowArray __pyx_v_array;
  struct ArrowSchema __pyx_v_schema;
  questdb_error *__pyx_v_err;
  enum qwp_reader_arrow_batch_result __pyx_v_result;
  struct qwp_reader_cursor *__pyx_v_cursor;
  PyObject *__pyx_v_batch = NULL;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_compact = __pyx_optional_args->compact;
    }
  }
 0428:     """Pull one batch via qwp_reader_cursor_next_arrow_batch.
 0429: 
 0430:     Returns:
 0431:       - None on clean end-of-stream.
 0432:       - A pyarrow.RecordBatch on success.
 0433:     Raises QuestDBError on FFI error.
 0434:     """
 0435:     cdef ArrowArray array
 0436:     cdef ArrowSchema schema
+0437:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 0438:     cdef qwp_reader_arrow_batch_result result
 0439:     cdef qwp_reader_cursor* cursor
 0440: 
 0441:     # The native Arrow export leaves both outputs untouched on failure. Mark
 0442:     # them released up front so any future shared cleanup path can safely use
 0443:     # the Arrow C Data convention (release == NULL) on every return path.
+0444:     array.release = NULL
  __pyx_v_array.release = NULL;
+0445:     schema.release = NULL
  __pyx_v_schema.release = NULL;
 0446: 
+0447:     handle._check_not_driving('next_arrow_batch', check_lock=True)
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.check_lock = 1;
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_check_not_driving(__pyx_v_handle, __pyx_mstate_global->__pyx_n_u_next_arrow_batch, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 447, __pyx_L1_error)
+0448:     with handle._lock:
  /*with:*/ {
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 448, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 448, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 448, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L12_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client._fetch_one_batch", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_14) < 0) __PYX_ERR(2, 448, __pyx_L9_except_error)
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_5);
          __Pyx_XGOTREF(__pyx_t_14);
          __pyx_t_6 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_5, __pyx_t_14); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 448, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 448, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (__pyx_t_12 < (0)) __PYX_ERR(2, 448, __pyx_L9_except_error)
          __pyx_t_16 = (!__pyx_t_12);
          if (unlikely(__pyx_t_16)) {
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_XGIVEREF(__pyx_t_14);
            __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_5, __pyx_t_14);
            __pyx_t_4 = 0;  __pyx_t_5 = 0;  __pyx_t_14 = 0; 
            __PYX_ERR(2, 448, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        __pyx_L12_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_3) {
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 448, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L24;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L1_error;
    __pyx_L24:;
  }
+0449:         handle._check_not_driving('next_arrow_batch')
          __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_check_not_driving(__pyx_v_handle, __pyx_mstate_global->__pyx_n_u_next_arrow_batch, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 449, __pyx_L7_error)
+0450:         cursor = handle._cursor
          __pyx_t_11 = __pyx_v_handle->_cursor;
          __pyx_v_cursor = __pyx_t_11;
+0451:         if cursor == NULL:
          __pyx_t_12 = (__pyx_v_cursor == NULL);
          if (unlikely(__pyx_t_12)) {
/* … */
          }
+0452:             raise QuestDBError(
            __pyx_t_6 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 452, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_5);
+0453:                 QuestDBErrorCode.InvalidApiCall,
            __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 453, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_13);
            __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 453, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __pyx_t_7 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_5))) {
              __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
              assert(__pyx_t_6);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
              __Pyx_INCREF(__pyx_t_6);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
              __pyx_t_7 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_14, __pyx_mstate_global->__pyx_kp_u_cursor_is_closed};
              __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 452, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_4);
            }
            __Pyx_Raise(__pyx_t_4, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            __PYX_ERR(2, 452, __pyx_L7_error)
 0454:                 'cursor is closed')
+0455:         handle._native_in_flight = True
          __pyx_v_handle->_native_in_flight = 1;
+0456:         handle._pin()
          ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_pin(__pyx_v_handle);
+0457:         try:
          /*try:*/ {
+0458:             with nogil:
            {
                PyThreadState * _save;
                _save = PyEval_SaveThread();
                __Pyx_FastGIL_Remember();
                /*try:*/ {
/* … */
                /*finally:*/ {
                  /*normal exit:*/{
                    __Pyx_FastGIL_Forget();
                    PyEval_RestoreThread(_save);
                    goto __pyx_L19;
                  }
                  __pyx_L19:;
                }
            }
          }
+0459:                 if compact:
                  if (__pyx_v_compact) {
/* … */
                    goto __pyx_L20;
                  }
+0460:                     result = qwp_reader_cursor_next_arrow_batch_compact(
                    __pyx_v_result = qwp_reader_cursor_next_arrow_batch_compact(__pyx_v_cursor, (&__pyx_v_array), (&__pyx_v_schema), (&__pyx_v_err));
 0461:                         cursor, &array, &schema, &err)
 0462:                 else:
+0463:                     result = qwp_reader_cursor_next_arrow_batch(
                  /*else*/ {
/* … */
                    __pyx_v_result = qwp_reader_cursor_next_arrow_batch(__pyx_v_cursor, (&__pyx_v_array), (&__pyx_v_schema), (&__pyx_v_err));
                  }
                  __pyx_L20:;
                }
 0464:                         cursor, &array, &schema, &err)
 0465:         finally:
 0466:             # Cleared before `_unpin`, which may run a deferred free.
+0467:             handle._native_in_flight = False
          /*finally:*/ {
            /*normal exit:*/{
              __pyx_v_handle->_native_in_flight = 0;
+0468:             handle._unpin()
              ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_v_handle);
              goto __pyx_L16;
            }
            __pyx_L16:;
          }
 0469: 
+0470:     if result == qwp_reader_arrow_batch_ok:
  __pyx_t_16 = (__pyx_v_result == qwp_reader_arrow_batch_ok);
  if (__pyx_t_16) {
/* … */
  }
 0471:         # Hand ownership of the array + schema buffers to pyarrow.
 0472:         # _import_from_c moves the structs and nulls their release
 0473:         # callbacks; pyarrow's RecordBatch owns the buffers from here.
+0474:         try:
    {
      /*try:*/ {
/* … */
      }
      __pyx_L26_error:;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
      __pyx_L28_except_error:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_10, __pyx_t_9);
      goto __pyx_L1_error;
      __pyx_L30_try_return:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_10, __pyx_t_9);
      goto __pyx_L0;
    }
+0475:             batch = pa_module.RecordBatch._import_from_c(
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_pa_module, __pyx_mstate_global->__pyx_n_u_RecordBatch); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 475, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_5 = __pyx_t_4;
        __Pyx_INCREF(__pyx_t_5);
+0476:                 <uintptr_t>&array, <uintptr_t>&schema)
        __pyx_t_6 = __Pyx_PyLong_FromSize_t(((uintptr_t)(&__pyx_v_array))); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 476, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_13 = __Pyx_PyLong_FromSize_t(((uintptr_t)(&__pyx_v_schema))); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 476, __pyx_L26_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_t_13};
          __pyx_t_14 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_import_from_c, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 475, __pyx_L26_error)
          __Pyx_GOTREF(__pyx_t_14);
        }
        __pyx_v_batch = __pyx_t_14;
        __pyx_t_14 = 0;
+0477:             _oidc_raise_unscheduled_main()
        __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 477, __pyx_L26_error)
+0478:             return batch
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_batch);
        __pyx_r = __pyx_v_batch;
        goto __pyx_L30_try_return;
+0479:         except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client._fetch_one_batch", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_4, &__pyx_t_13) < 0) __PYX_ERR(2, 479, __pyx_L28_except_error)
        __Pyx_XGOTREF(__pyx_t_14);
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_XGOTREF(__pyx_t_13);
+0480:             if array.release != NULL:
        __pyx_t_16 = (__pyx_v_array.release != NULL);
        if (__pyx_t_16) {
/* … */
        }
+0481:                 array.release(&array)
          __pyx_v_array.release((&__pyx_v_array));
+0482:             if schema.release != NULL:
        __pyx_t_16 = (__pyx_v_schema.release != NULL);
        if (__pyx_t_16) {
/* … */
        }
+0483:                 schema.release(&schema)
          __pyx_v_schema.release((&__pyx_v_schema));
+0484:             raise
        __Pyx_GIVEREF(__pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_4, __pyx_t_13);
        __pyx_t_14 = 0;  __pyx_t_4 = 0;  __pyx_t_13 = 0; 
        __PYX_ERR(2, 484, __pyx_L28_except_error)
      }
 0485: 
+0486:     if result == qwp_reader_arrow_batch_end:
  __pyx_t_16 = (__pyx_v_result == qwp_reader_arrow_batch_end);
  if (__pyx_t_16) {
/* … */
  }
+0487:         _oidc_raise_unscheduled_main()
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 487, __pyx_L1_error)
+0488:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
 0489: 
 0490:     # Error path.
+0491:     if err == NULL:
  __pyx_t_16 = (__pyx_v_err == NULL);
  if (unlikely(__pyx_t_16)) {
/* … */
  }
+0492:         raise QuestDBError(
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 492, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
+0493:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 493, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 493, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_14);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_14, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_qwp_reader_cursor_next_arrow_bat};
      __pyx_t_13 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 492, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
    }
    __Pyx_Raise(__pyx_t_13, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __PYX_ERR(2, 492, __pyx_L1_error)
 0494:             'qwp_reader_cursor_next_arrow_batch returned error '
 0495:             'without setting err_out')
+0496:     raise _reader_err_to_py(err)
  __pyx_t_13 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 496, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_Raise(__pyx_t_13, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __PYX_ERR(2, 496, __pyx_L1_error)
 0497: 
 0498: 
+0499: cdef tuple _fetch_all_record_batches(
static PyObject *__pyx_f_7questdb_7_client__fetch_all_record_batches(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle, PyObject *__pyx_v_pa_module, struct __pyx_opt_args_7questdb_7_client__fetch_all_record_batches *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client._fetch_all_record_batches", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_schema);
  __Pyx_XDECREF(__pyx_v_batches);
  __Pyx_XDECREF(__pyx_v_batch);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_66generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
struct __pyx_opt_args_7questdb_7_client__fetch_all_record_batches {
  int __pyx_n;
  int compact;
};
+0500:         _CursorHandle handle, object pa_module, bint compact=False):
  int __pyx_v_compact = ((int)0);
  int __pyx_v_seen_seq;
  int __pyx_v_current_seq;
  PyObject *__pyx_v_schema = 0;
  PyObject *__pyx_v_batches = 0;
  PyObject *__pyx_v_batch = 0;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_compact = __pyx_optional_args->compact;
    }
  }
 0501:     """Drain the cursor into a list of ``pyarrow.RecordBatch`` we own.
 0502: 
 0503:     The materialise-whole entry points install the failover-reset
 0504:     trampoline, which bumps ``handle._reset_seq`` when a mid-query
 0505:     failover re-executes the query on a new endpoint. Because we own the
 0506:     accumulator here, on a reset we discard every batch buffered so far
 0507:     and restart from the replayed batch-0 — yielding a correct,
 0508:     duplicate-free whole result. Returns ``(schema_or_None, batches)``;
 0509:     the cursor is freed and the reader marked drained on clean
 0510:     end-of-stream.
 0511:     """
+0512:     cdef int seen_seq = handle._reset_sequence()
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_reset_sequence(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 512, __pyx_L1_error)
  __pyx_v_seen_seq = __pyx_t_1;
 0513:     cdef int current_seq
+0514:     cdef object schema = None
  __Pyx_INCREF(Py_None);
  __pyx_v_schema = Py_None;
+0515:     cdef list batches = []
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_batches = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 0516:     cdef object batch
+0517:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+0518:         while True:
      while (1) {
+0519:             batch = _fetch_one_batch(handle, pa_module, compact)
        __pyx_t_6.__pyx_n = 1;
        __pyx_t_6.compact = __pyx_v_compact;
        __pyx_t_2 = __pyx_f_7questdb_7_client__fetch_one_batch(__pyx_v_handle, __pyx_v_pa_module, &__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 519, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_batch, __pyx_t_2);
        __pyx_t_2 = 0;
+0520:             current_seq = handle._reset_sequence()
        __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_reset_sequence(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 520, __pyx_L3_error)
        __pyx_v_current_seq = __pyx_t_1;
+0521:             if current_seq != seen_seq:
        __pyx_t_7 = (__pyx_v_current_seq != __pyx_v_seen_seq);
        if (__pyx_t_7) {
/* … */
        }
 0522:                 # Mid-query failover replayed from batch-0: drop the
 0523:                 # pre-failover accumulation and re-pin the schema.
+0524:                 seen_seq = current_seq
          __pyx_v_seen_seq = __pyx_v_current_seq;
+0525:                 batches = []
          __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 525, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF_SET(__pyx_v_batches, ((PyObject*)__pyx_t_2));
          __pyx_t_2 = 0;
+0526:                 schema = None
          __Pyx_INCREF(Py_None);
          __Pyx_DECREF_SET(__pyx_v_schema, Py_None);
+0527:             if batch is None:
        __pyx_t_7 = (__pyx_v_batch == Py_None);
        if (__pyx_t_7) {
/* … */
        }
+0528:                 break
          goto __pyx_L10_break;
+0529:             if schema is None:
        __pyx_t_7 = (__pyx_v_schema == Py_None);
        if (__pyx_t_7) {
/* … */
        }
+0530:                 schema = batch.schema
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_batch, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 530, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF_SET(__pyx_v_schema, __pyx_t_2);
          __pyx_t_2 = 0;
+0531:             batches.append(batch)
        __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_batches, __pyx_v_batch); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(2, 531, __pyx_L3_error)
      }
      __pyx_L10_break:;
+0532:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._fetch_all_record_batches", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_9, &__pyx_t_10) < 0) __PYX_ERR(2, 532, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
+0533:         handle._free()
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_free(__pyx_v_handle);
+0534:         raise
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_9, __pyx_t_10);
      __pyx_t_2 = 0;  __pyx_t_9 = 0;  __pyx_t_10 = 0; 
      __PYX_ERR(2, 534, __pyx_L5_except_error)
    }
+0535:     try:
  /*try:*/ {
+0536:         _mark_reader_drained(handle)
    __pyx_t_11 = __pyx_f_7questdb_7_client__mark_reader_drained(__pyx_v_handle); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 536, __pyx_L17_error)
  }
 0537:     finally:
+0538:         handle._free()
  /*finally:*/ {
    /*normal exit:*/{
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_free(__pyx_v_handle);
      goto __pyx_L18;
    }
    __pyx_L17_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      if ( unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __pyx_t_1 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_free(__pyx_v_handle);
      }
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_4, __pyx_t_3);
      __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __pyx_lineno = __pyx_t_1; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
      goto __pyx_L1_error;
    }
    __pyx_L18:;
  }
+0539:     return (schema, batches)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_INCREF(__pyx_v_schema);
  __Pyx_GIVEREF(__pyx_v_schema);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_schema) != (0)) __PYX_ERR(2, 539, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_batches);
  __Pyx_GIVEREF(__pyx_v_batches);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_batches) != (0)) __PYX_ERR(2, 539, __pyx_L1_error);
  __pyx_r = ((PyObject*)__pyx_t_10);
  __pyx_t_10 = 0;
  goto __pyx_L0;
 0540: 
 0541: 
+0542: def _record_batch_generator(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_65_record_batch_generator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_64_record_batch_generator, "Yield Arrow batches and never block when generator finalization runs.");
static PyMethodDef __pyx_mdef_7questdb_7_client_65_record_batch_generator = {"_record_batch_generator", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_65_record_batch_generator, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_64_record_batch_generator};
static PyObject *__pyx_pw_7questdb_7_client_65_record_batch_generator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_first = 0;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle = 0;
  PyObject *__pyx_v_pa = 0;
  int __pyx_v_compact;
  int __pyx_v_seen_seq;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_record_batch_generator (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_first,&__pyx_mstate_global->__pyx_n_u_cursor_handle,&__pyx_mstate_global->__pyx_n_u_pa,&__pyx_mstate_global->__pyx_n_u_compact,&__pyx_mstate_global->__pyx_n_u_seen_seq,0};
  PyObject* values[5] = {0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 542, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(2, 542, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(2, 542, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 542, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 542, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 542, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_record_batch_generator", 0) < (0)) __PYX_ERR(2, 542, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_record_batch_generator", 1, 5, 5, i); __PYX_ERR(2, 542, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 5)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 542, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 542, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 542, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(2, 542, __pyx_L3_error)
      values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(2, 542, __pyx_L3_error)
    }
    __pyx_v_first = values[0];
    __pyx_v_cursor_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)values[1]);
    __pyx_v_pa = values[2];
    __pyx_v_compact = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_compact == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 546, __pyx_L3_error)
    __pyx_v_seen_seq = __Pyx_PyLong_As_int(values[4]); if (unlikely((__pyx_v_seen_seq == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 547, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_record_batch_generator", 1, 5, 5, __pyx_nargs); __PYX_ERR(2, 542, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._record_batch_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cursor_handle), __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle, 1, "cursor_handle", 0))) __PYX_ERR(2, 544, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_64_record_batch_generator(__pyx_self, __pyx_v_first, __pyx_v_cursor_handle, __pyx_v_pa, __pyx_v_compact, __pyx_v_seen_seq);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_64_record_batch_generator(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_first, struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle, PyObject *__pyx_v_pa, int __pyx_v_compact, int __pyx_v_seen_seq) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct___record_batch_generator *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct___record_batch_generator *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct___record_batch_generator(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct___record_batch_generator, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct___record_batch_generator *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(2, 542, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_first = __pyx_v_first;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_first);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_first);
  __pyx_cur_scope->__pyx_v_cursor_handle = __pyx_v_cursor_handle;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_cursor_handle);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_cursor_handle);
  __pyx_cur_scope->__pyx_v_pa = __pyx_v_pa;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pa);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pa);
  __pyx_cur_scope->__pyx_v_compact = __pyx_v_compact;
  __pyx_cur_scope->__pyx_v_seen_seq = __pyx_v_seen_seq;
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_66generator, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[0]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_record_batch_generator, __pyx_mstate_global->__pyx_n_u_record_batch_generator, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(2, 542, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._record_batch_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_7questdb_7_client_66generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_record_batch_generator", 0);
  __pyx_L3_first_run:;
  if (unlikely(__pyx_sent_value != Py_None)) {
    if (unlikely(__pyx_sent_value)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started generator");
    __PYX_ERR(2, 542, __pyx_L1_error)
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("_record_batch_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_65_record_batch_generator, 0, __pyx_mstate_global->__pyx_n_u_record_batch_generator, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[0])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 542, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_record_batch_generator, __pyx_t_18) < (0)) __PYX_ERR(2, 542, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct___record_batch_generator {
  PyObject_HEAD
  int __pyx_v_compact;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle;
  PyObject *__pyx_v_first;
  PyObject *__pyx_v_nxt;
  PyObject *__pyx_v_pa;
  int __pyx_v_seen_seq;
};

 0543:         object first,
 0544:         _CursorHandle cursor_handle,
 0545:         object pa,
 0546:         bint compact,
 0547:         int seen_seq):
 0548:     """Yield Arrow batches and never block when generator finalization runs."""
+0549:     try:
  /*try:*/ {
+0550:         yield first
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_first);
    __pyx_r = __pyx_cur_scope->__pyx_v_first;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L7_resume_from_yield:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(2, 550, __pyx_L5_error)
+0551:         while True:
    while (1) {
+0552:             nxt = _fetch_one_batch(cursor_handle, pa, compact)
      __pyx_t_2.__pyx_n = 1;
      __pyx_t_2.compact = __pyx_cur_scope->__pyx_v_compact;
      __pyx_t_1 = __pyx_f_7questdb_7_client__fetch_one_batch(__pyx_cur_scope->__pyx_v_cursor_handle, __pyx_cur_scope->__pyx_v_pa, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 552, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_nxt);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_nxt, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_1);
      __pyx_t_1 = 0;
+0553:             if cursor_handle._reset_sequence() != seen_seq:
      __pyx_t_3 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_cur_scope->__pyx_v_cursor_handle->__pyx_vtab)->_reset_sequence(__pyx_cur_scope->__pyx_v_cursor_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 553, __pyx_L5_error)
      __pyx_t_4 = (__pyx_t_3 != __pyx_cur_scope->__pyx_v_seen_seq);
      if (unlikely(__pyx_t_4)) {
/* … */
      }
 0554:                 # Mid-query failover after batches were already yielded: the
 0555:                 # replayed batch-0 would duplicate what the consumer holds.
 0556:                 # Streaming cannot discard it, so surface a catchable error.
+0557:                 raise QuestDBError(
        __pyx_t_5 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 557, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_6);
+0558:                     QuestDBErrorCode.FailoverWouldDuplicate,
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 558, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_FailoverWouldDuplicate); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 558, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_9 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
          assert(__pyx_t_5);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
          __pyx_t_9 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_mid_query_failover_would_duplica};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 557, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_Raise(__pyx_t_1, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(2, 557, __pyx_L5_error)
 0559:                     'mid-query failover would duplicate already-delivered '
 0560:                     'batches; re-issue the query')
+0561:             if nxt is None:
      __pyx_t_4 = (__pyx_cur_scope->__pyx_v_nxt == Py_None);
      if (__pyx_t_4) {
/* … */
      }
 0562:                 # Reached terminal cleanly; reader is reusable.
+0563:                 _mark_reader_drained(cursor_handle)
        __pyx_t_10 = __pyx_f_7questdb_7_client__mark_reader_drained(__pyx_cur_scope->__pyx_v_cursor_handle); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 563, __pyx_L5_error)
+0564:                 return
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        goto __pyx_L4_return;
+0565:             yield nxt
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_nxt);
      __pyx_r = __pyx_cur_scope->__pyx_v_nxt;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 2;
      return __pyx_r;
      __pyx_L12_resume_from_yield:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(2, 565, __pyx_L5_error)
    }
  }
 0566:     finally:
+0567:         _reclaim_cursor_no_wait(cursor_handle)
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_f_7questdb_7_client__reclaim_cursor_no_wait(__pyx_cur_scope->__pyx_v_cursor_handle);
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_assign
      __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
      if ( unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_18);
      __pyx_t_3 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
      {
        __pyx_f_7questdb_7_client__reclaim_cursor_no_wait(__pyx_cur_scope->__pyx_v_cursor_handle);
      }
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
      __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
      __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
      goto __pyx_L1_error;
    }
    __pyx_L4_return: {
      __pyx_t_18 = __pyx_r;
      __pyx_r = 0;
      __pyx_f_7questdb_7_client__reclaim_cursor_no_wait(__pyx_cur_scope->__pyx_v_cursor_handle);
      __pyx_r = __pyx_t_18;
      __pyx_t_18 = 0;
      goto __pyx_L0;
    }
    __pyx_L6:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 0568: 
 0569: 
+0570: cdef object _build_record_batch_reader(
static PyObject *__pyx_f_7questdb_7_client__build_record_batch_reader(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle, struct __pyx_opt_args_7questdb_7_client__build_record_batch_reader *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_AddTraceback("questdb._client._build_record_batch_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pa);
  __Pyx_XDECREF(__pyx_v_first);
  __Pyx_XDECREF(__pyx_v_empty);
  __Pyx_XDECREF(__pyx_v_schema);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client__build_record_batch_reader {
  int __pyx_n;
  int compact;
};
+0571:         _CursorHandle cursor_handle, bint compact=False):
  int __pyx_v_compact = ((int)0);
  PyObject *__pyx_v_pa = NULL;
  PyObject *__pyx_v_first = NULL;
  PyObject *__pyx_v_empty = NULL;
  int __pyx_v_seen_seq;
  PyObject *__pyx_v_schema = NULL;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_compact = __pyx_optional_args->compact;
    }
  }
 0572:     """Construct a pyarrow.RecordBatchReader over the cursor.
 0573: 
 0574:     Peeks the first batch to capture the stream schema, then yields
 0575:     the remaining batches lazily. The cursor is explicitly freed when
 0576:     the underlying generator completes (exhaustion, exception, or
 0577:     close), so the owning reader can be closed without leaking a live
 0578:     cursor.
 0579:     """
+0580:     import pyarrow as pa
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pyarrow, 0, 0, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 580, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_pa = __pyx_t_1;
  __pyx_t_1 = 0;
 0581: 
+0582:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+0583:         first = _fetch_one_batch(cursor_handle, pa, compact)
      __pyx_t_5.__pyx_n = 1;
      __pyx_t_5.compact = __pyx_v_compact;
      __pyx_t_1 = __pyx_f_7questdb_7_client__fetch_one_batch(__pyx_v_cursor_handle, __pyx_v_pa, &__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 583, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_first = __pyx_t_1;
      __pyx_t_1 = 0;
+0584:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._build_record_batch_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 584, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
+0585:         cursor_handle._free()
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_cursor_handle->__pyx_vtab)->_free(__pyx_v_cursor_handle);
+0586:         raise
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_6, __pyx_t_7);
      __pyx_t_1 = 0;  __pyx_t_6 = 0;  __pyx_t_7 = 0; 
      __PYX_ERR(2, 586, __pyx_L5_except_error)
    }
+0587:     if first is None:
  __pyx_t_8 = (__pyx_v_first == Py_None);
  if (__pyx_t_8) {
/* … */
  }
 0588:         # No result set (a non-SELECT statement ends with EXEC_DONE and
 0589:         # ships no RESULT_BATCH), so there is no schema to surface; an
 0590:         # empty SELECT still ships a zero-row batch carrying the schema.
+0591:         try:
    /*try:*/ {
+0592:             _mark_reader_drained(cursor_handle)
      __pyx_t_9 = __pyx_f_7questdb_7_client__mark_reader_drained(__pyx_v_cursor_handle); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 592, __pyx_L13_error)
    }
 0593:         finally:
+0594:             _reclaim_cursor_no_wait(cursor_handle)
    /*finally:*/ {
      /*normal exit:*/{
        __pyx_f_7questdb_7_client__reclaim_cursor_no_wait(__pyx_v_cursor_handle);
        goto __pyx_L14;
      }
      __pyx_L13_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
        if ( unlikely(__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2) < 0)) __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_XGOTREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_14);
        __Pyx_XGOTREF(__pyx_t_15);
        __pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename;
        {
          __pyx_f_7questdb_7_client__reclaim_cursor_no_wait(__pyx_v_cursor_handle);
        }
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_4);
        __Pyx_XGIVEREF(__pyx_t_3);
        __Pyx_XGIVEREF(__pyx_t_2);
        __Pyx_ErrRestore(__pyx_t_4, __pyx_t_3, __pyx_t_2);
        __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
        __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12;
        goto __pyx_L1_error;
      }
      __pyx_L14:;
    }
+0595:         empty = pa.table({})
    __pyx_t_6 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 595, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_16 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_1};
      __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_table, __pyx_callargs+__pyx_t_16, (2-__pyx_t_16) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 595, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_v_empty = __pyx_t_7;
    __pyx_t_7 = 0;
+0596:         return empty.to_reader()
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_v_empty;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_16 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
      __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_reader, __pyx_callargs+__pyx_t_16, (1-__pyx_t_16) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 596, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
 0597: 
 0598:     # Pin the sequence after the first batch: a pre-delivery failover
 0599:     # replays batch-0 transparently into ``first``, so only resets that
 0600:     # happen once batches are flowing can duplicate already-yielded data.
+0601:     cdef int seen_seq = cursor_handle._reset_sequence()
  __pyx_t_11 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_cursor_handle->__pyx_vtab)->_reset_sequence(__pyx_v_cursor_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 601, __pyx_L1_error)
  __pyx_v_seen_seq = __pyx_t_11;
+0602:     schema = first.schema
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_first, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_v_schema = __pyx_t_7;
  __pyx_t_7 = 0;
+0603:     return pa.RecordBatchReader.from_batches(
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_RecordBatchReader); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __pyx_t_6;
  __Pyx_INCREF(__pyx_t_1);
 0604:         schema,
+0605:         _record_batch_generator(
  __pyx_t_18 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_record_batch_generator); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
+0606:             first, cursor_handle, pa, compact, seen_seq))
  __pyx_t_20 = __Pyx_PyBool_FromLong(__pyx_v_compact); if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __pyx_t_21 = __Pyx_PyLong_From_int(__pyx_v_seen_seq); if (unlikely(!__pyx_t_21)) __PYX_ERR(2, 606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __pyx_t_16 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_19))) {
    __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_19);
    assert(__pyx_t_18);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_19);
    __Pyx_INCREF(__pyx_t_18);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_19, __pyx__function);
    __pyx_t_16 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[6] = {__pyx_t_18, __pyx_v_first, ((PyObject *)__pyx_v_cursor_handle), __pyx_v_pa, __pyx_t_20, __pyx_t_21};
    __pyx_t_17 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_16, (6-__pyx_t_16) | (__pyx_t_16*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 605, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
  }
  __pyx_t_16 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_v_schema, __pyx_t_17};
    __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_batches, __pyx_callargs+__pyx_t_16, (3-__pyx_t_16) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 603, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;
 0607: 
 0608: 
+0609: cdef void_int _mark_reader_drained(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__mark_reader_drained(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle) {
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._mark_reader_drained", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0610:         _CursorHandle cursor_handle) except -1:
 0611:     """Recycle the reader: call only once the cursor reached its terminal."""
+0612:     if cursor_handle is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_cursor_handle) == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0613:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+0614:     with cursor_handle._lock:
  /*with:*/ {
    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_v_cursor_handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 614, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = NULL;
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_cursor_handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 614, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 614, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_2) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 614, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L14;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L1_error;
    __pyx_L14:;
  }
+0615:         cursor_handle._mark_drained()
          ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_cursor_handle->__pyx_vtab)->_mark_drained(__pyx_v_cursor_handle);
+0616:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 0617: 
 0618: 
+0619: cdef void_int _drain_cursor(_CursorHandle handle) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__drain_cursor(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle) {
  struct qwp_reader_cursor *__pyx_v_cursor;
  questdb_error *__pyx_v_err;
  struct qwp_reader_batch const *__pyx_v_batch;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("questdb._client._drain_cursor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0620:     cdef qwp_reader_cursor* cursor
+0621:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 0622:     cdef const qwp_reader_batch* batch
+0623:     handle._check_not_driving('drain', check_lock=True)
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.check_lock = 1;
  __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_check_not_driving(__pyx_v_handle, __pyx_mstate_global->__pyx_n_u_drain, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 623, __pyx_L1_error)
+0624:     while True:
  while (1) {
+0625:         with handle._lock:
    /*with:*/ {
      __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 625, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = NULL;
      __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 625, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (likely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
        assert(__pyx_t_5);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 625, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      /*try:*/ {
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          goto __pyx_L18_try_end;
          __pyx_L11_error:;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          /*except:*/ {
            __Pyx_AddTraceback("questdb._client._drain_cursor", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_14) < 0) __PYX_ERR(2, 625, __pyx_L13_except_error)
            __Pyx_XGOTREF(__pyx_t_4);
            __Pyx_XGOTREF(__pyx_t_5);
            __Pyx_XGOTREF(__pyx_t_14);
            __pyx_t_6 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_5, __pyx_t_14); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 625, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 625, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_15);
            __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            if (__pyx_t_12 < (0)) __PYX_ERR(2, 625, __pyx_L13_except_error)
            __pyx_t_16 = (!__pyx_t_12);
            if (unlikely(__pyx_t_16)) {
              __Pyx_GIVEREF(__pyx_t_4);
              __Pyx_GIVEREF(__pyx_t_5);
              __Pyx_XGIVEREF(__pyx_t_14);
              __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_5, __pyx_t_14);
              __pyx_t_4 = 0;  __pyx_t_5 = 0;  __pyx_t_14 = 0; 
              __PYX_ERR(2, 625, __pyx_L13_except_error)
            }
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            goto __pyx_L12_exception_handled;
          }
          __pyx_L13_except_error:;
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
          goto __pyx_L1_error;
          __pyx_L12_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
          __pyx_L18_try_end:;
        }
      }
      /*finally:*/ {
        /*normal exit:*/{
          if (__pyx_t_3) {
            __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_mstate_global->__pyx_tuple[3], NULL);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 625, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          }
          goto __pyx_L10;
        }
        __pyx_L10:;
      }
      goto __pyx_L33;
      __pyx_L5_error:;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L1_error;
      __pyx_L33:;
    }
+0626:             cursor = handle._cursor
            __pyx_t_11 = __pyx_v_handle->_cursor;
            __pyx_v_cursor = __pyx_t_11;
+0627:             if cursor == NULL:
            __pyx_t_12 = (__pyx_v_cursor == NULL);
            if (unlikely(__pyx_t_12)) {
/* … */
            }
+0628:                 raise QuestDBError(
              __pyx_t_6 = NULL;
              __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 628, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_5);
+0629:                     QuestDBErrorCode.InvalidApiCall, 'cursor is closed')
              __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 629, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_13);
              __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 629, __pyx_L11_error)
              __Pyx_GOTREF(__pyx_t_14);
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __pyx_t_7 = 1;
              #if CYTHON_UNPACK_METHODS
              if (unlikely(PyMethod_Check(__pyx_t_5))) {
                __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
                assert(__pyx_t_6);
                PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
                __Pyx_INCREF(__pyx_t_6);
                __Pyx_INCREF(__pyx__function);
                __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
                __pyx_t_7 = 0;
              }
              #endif
              {
                PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_14, __pyx_mstate_global->__pyx_kp_u_cursor_is_closed};
                __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 628, __pyx_L11_error)
                __Pyx_GOTREF(__pyx_t_4);
              }
              __Pyx_Raise(__pyx_t_4, 0, 0, 0);
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
              __PYX_ERR(2, 628, __pyx_L11_error)
+0630:             handle._check_not_driving('drain')
            __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_check_not_driving(__pyx_v_handle, __pyx_mstate_global->__pyx_n_u_drain, NULL); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 630, __pyx_L11_error)
+0631:             handle._native_in_flight = True
            __pyx_v_handle->_native_in_flight = 1;
+0632:             handle._pin()
            ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_pin(__pyx_v_handle);
+0633:             try:
            /*try:*/ {
+0634:                 with nogil:
              {
                  PyThreadState * _save;
                  _save = PyEval_SaveThread();
                  __Pyx_FastGIL_Remember();
                  /*try:*/ {
/* … */
                  /*finally:*/ {
                    /*normal exit:*/{
                      __Pyx_FastGIL_Forget();
                      PyEval_RestoreThread(_save);
                      goto __pyx_L29;
                    }
                    __pyx_L29:;
                  }
              }
            }
+0635:                     batch = qwp_reader_cursor_next_batch(cursor, &err)
                    __pyx_v_batch = qwp_reader_cursor_next_batch(__pyx_v_cursor, (&__pyx_v_err));
                  }
 0636:             finally:
 0637:                 # Cleared before `_unpin`, which may run a deferred free.
+0638:                 handle._native_in_flight = False
            /*finally:*/ {
              /*normal exit:*/{
                __pyx_v_handle->_native_in_flight = 0;
+0639:                 handle._unpin()
                ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_v_handle);
                goto __pyx_L24;
              }
              __pyx_L24:;
            }
+0640:         if batch == NULL:
    __pyx_t_16 = (__pyx_v_batch == NULL);
    if (__pyx_t_16) {
/* … */
    }
+0641:             if err != NULL:
      __pyx_t_16 = (__pyx_v_err != NULL);
      if (unlikely(__pyx_t_16)) {
/* … */
      }
+0642:                 raise _reader_err_to_py(err)
        __pyx_t_14 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 642, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_Raise(__pyx_t_14, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __PYX_ERR(2, 642, __pyx_L1_error)
+0643:             _oidc_raise_unscheduled_main()
      __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 643, __pyx_L1_error)
+0644:             break
      goto __pyx_L4_break;
+0645:         _oidc_raise_unscheduled_main()
    __pyx_t_1 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 645, __pyx_L1_error)
  }
  __pyx_L4_break:;
+0646:     try:
  /*try:*/ {
+0647:         _mark_reader_drained(handle)
    __pyx_t_1 = __pyx_f_7questdb_7_client__mark_reader_drained(__pyx_v_handle); if (unlikely(__pyx_t_1 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 647, __pyx_L37_error)
  }
 0648:     finally:
+0649:         handle._free()
  /*finally:*/ {
    /*normal exit:*/{
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_free(__pyx_v_handle);
      goto __pyx_L38;
    }
    __pyx_L37_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_3 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_15 = 0; __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_15, &__pyx_t_20);
      if ( unlikely(__Pyx_GetException(&__pyx_t_3, &__pyx_t_10, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_3, &__pyx_t_10, &__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_20);
      __pyx_t_17 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_free(__pyx_v_handle);
      }
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_20);
      __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_15, __pyx_t_20);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ErrRestore(__pyx_t_3, __pyx_t_10, __pyx_t_9);
      __pyx_t_3 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; __pyx_t_15 = 0; __pyx_t_20 = 0;
      __pyx_lineno = __pyx_t_17; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
      goto __pyx_L1_error;
    }
    __pyx_L38:;
  }
 0650: 
 0651: 
+0652: cdef _ReaderHandle _borrow_reader_from_pool(questdb_db* db):
static struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_f_7questdb_7_client__borrow_reader_from_pool(struct questdb_db *__pyx_v_db) {
  questdb_error *__pyx_v_err;
  struct qwp_reader *__pyx_v_reader;
  struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_handle = 0;
  struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._borrow_reader_from_pool", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0653:     """Borrow a reader from the Rust-side ``questdb_db`` pool.
 0654: 
 0655:     Wraps ``questdb_db_borrow_reader`` and packs the result into a
 0656:     :class:`_ReaderHandle` that knows it came from this pool, so
 0657:     its dealloc returns/drops via the matching FFI.
 0658:     """
+0659:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
+0660:     cdef qwp_reader* reader = NULL
  __pyx_v_reader = NULL;
+0661:     with nogil:
  {
      PyThreadState * _save;
      _save = PyEval_SaveThread();
      __Pyx_FastGIL_Remember();
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_FastGIL_Forget();
          PyEval_RestoreThread(_save);
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+0662:         reader = questdb_db_borrow_reader(db, &err)
        __pyx_v_reader = questdb_db_borrow_reader(__pyx_v_db, (&__pyx_v_err));
      }
+0663:     if reader == NULL:
  __pyx_t_1 = (__pyx_v_reader == NULL);
  if (__pyx_t_1) {
/* … */
  }
+0664:         if err == NULL:
    __pyx_t_1 = (__pyx_v_err == NULL);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+0665:             raise QuestDBError(
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 665, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
+0666:                 QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 666, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 666, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_questdb_db_borrow_reader_returne};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 665, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(2, 665, __pyx_L1_error)
 0667:                 'questdb_db_borrow_reader returned NULL without setting err')
+0668:         raise _reader_err_to_py(err)
    __pyx_t_2 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 668, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 668, __pyx_L1_error)
 0669:     cdef _ReaderHandle handle
+0670:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    goto __pyx_L13_try_end;
    __pyx_L8_error:;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __pyx_L10_except_error:;
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_XGIVEREF(__pyx_t_10);
    __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
    goto __pyx_L1_error;
    __pyx_L13_try_end:;
  }
+0671:         handle = _ReaderHandle()
      __pyx_t_4 = NULL;
      __pyx_t_7 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__ReaderHandle, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 671, __pyx_L8_error)
        __Pyx_GOTREF((PyObject *)__pyx_t_2);
      }
      __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__ReaderHandle *)__pyx_t_2);
      __pyx_t_2 = 0;
+0672:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._borrow_reader_from_pool", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(2, 672, __pyx_L10_except_error)
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_6);
+0673:         with nogil:
      {
          PyThreadState * _save;
          _save = PyEval_SaveThread();
          __Pyx_FastGIL_Remember();
          /*try:*/ {
/* … */
          /*finally:*/ {
            /*normal exit:*/{
              __Pyx_FastGIL_Forget();
              PyEval_RestoreThread(_save);
              goto __pyx_L20;
            }
            __pyx_L20:;
          }
      }
+0674:             qwp_reader_close(reader)
            qwp_reader_close(__pyx_v_reader);
          }
+0675:         raise
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_6);
      __pyx_t_2 = 0;  __pyx_t_4 = 0;  __pyx_t_6 = 0; 
      __PYX_ERR(2, 675, __pyx_L10_except_error)
    }
+0676:     handle._attach(reader)
  __pyx_t_6 = ((struct __pyx_vtabstruct_7questdb_7_client__ReaderHandle *)__pyx_v_handle->__pyx_vtab)->_attach(__pyx_v_handle, __pyx_v_reader); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 676, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 0677:     # A freshly borrowed reader is pristine: recycle it unless a query
 0678:     # arms _must_close at the network boundary (_execute_query).
+0679:     handle._must_close = False
  __pyx_v_handle->_must_close = 0;
+0680:     _oidc_raise_unscheduled_main()
  __pyx_t_11 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_11 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 680, __pyx_L1_error)
+0681:     return handle
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_handle);
  __pyx_r = __pyx_v_handle;
  goto __pyx_L0;
 0682: 
 0683: 
+0684: cdef object _snapshot_server_info(_ReaderHandle handle):
static PyObject *__pyx_f_7questdb_7_client__snapshot_server_info(struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_handle) {
  struct qwp_reader_server_info const *__pyx_v_si;
  char const *__pyx_v_buf;
  size_t __pyx_v_buf_len;
  int __pyx_v_role_int;
  PyObject *__pyx_v_role = NULL;
  PyObject *__pyx_v_entry = NULL;
  uint8_t __pyx_v_role_byte;
  uint64_t __pyx_v_epoch;
  uint32_t __pyx_v_capabilities;
  int64_t __pyx_v_server_wall_ns;
  PyObject *__pyx_v_cluster_id = NULL;
  PyObject *__pyx_v_node_id = NULL;
  PyObject *__pyx_v_zone_id = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client._snapshot_server_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_role);
  __Pyx_XDECREF(__pyx_v_entry);
  __Pyx_XDECREF(__pyx_v_cluster_id);
  __Pyx_XDECREF(__pyx_v_node_id);
  __Pyx_XDECREF(__pyx_v_zone_id);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0685:     """Copy the reader's last-seen ``SERVER_INFO`` into a :class:`ServerInfo`.
 0686: 
 0687:     The FFI pointer is borrowed and invalidated by any reader operation
 0688:     that may reconnect, so every field is copied out before returning.
 0689:     """
 0690:     cdef const qwp_reader_server_info* si = \
+0691:         qwp_reader_current_server_info(handle._reader)
  __pyx_v_si = qwp_reader_current_server_info(__pyx_v_handle->_reader);
+0692:     cdef const char* buf = NULL
  __pyx_v_buf = NULL;
+0693:     cdef size_t buf_len = 0
  __pyx_v_buf_len = 0;
+0694:     if si == NULL:
  __pyx_t_1 = (__pyx_v_si == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0695:         raise QuestDBError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 695, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+0696:             QuestDBErrorCode.SocketError,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 696, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SocketError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 696, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_SERVER_INFO_unavailable_the_conn};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 695, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 695, __pyx_L1_error)
 0697:             'SERVER_INFO unavailable: the connection is mid-reconnect.')
+0698:     cdef int role_int = <int>qwp_reader_server_info_role(si)
  __pyx_v_role_int = ((int)qwp_reader_server_info_role(__pyx_v_si));
+0699:     role = ServerRole.Other
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ServerRole); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 699, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Other); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 699, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_role = __pyx_t_4;
  __pyx_t_4 = 0;
+0700:     for entry in ServerRole:
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ServerRole); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
    __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2);
    __pyx_t_8 = 0;
    __pyx_t_9 = NULL;
  } else {
    __pyx_t_8 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 700, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_9 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 700, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  for (;;) {
    if (likely(!__pyx_t_9)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 700, __pyx_L1_error)
          #endif
          if (__pyx_t_8 >= __pyx_temp) break;
        }
        __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_2, __pyx_t_8, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_8;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 700, __pyx_L1_error)
          #endif
          if (__pyx_t_8 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8));
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_8);
        #endif
        ++__pyx_t_8;
      }
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 700, __pyx_L1_error)
    } else {
      __pyx_t_4 = __pyx_t_9(__pyx_t_2);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 700, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  goto __pyx_L7_for_end;
  __pyx_L5_break:;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  goto __pyx_L7_for_end;
  __pyx_L7_for_end:;
+0701:         if entry.c_value == role_int:
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_c_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_role_int); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 701, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 701, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_1) {
/* … */
    }
+0702:             role = entry
      __Pyx_INCREF(__pyx_v_entry);
      __Pyx_DECREF_SET(__pyx_v_role, __pyx_v_entry);
+0703:             break
      goto __pyx_L5_break;
+0704:     cdef uint8_t role_byte = qwp_reader_server_info_role_byte(si)
  __pyx_v_role_byte = qwp_reader_server_info_role_byte(__pyx_v_si);
+0705:     cdef uint64_t epoch = qwp_reader_server_info_epoch(si)
  __pyx_v_epoch = qwp_reader_server_info_epoch(__pyx_v_si);
+0706:     cdef uint32_t capabilities = qwp_reader_server_info_capabilities(si)
  __pyx_v_capabilities = qwp_reader_server_info_capabilities(__pyx_v_si);
+0707:     cdef int64_t server_wall_ns = qwp_reader_server_info_server_wall_ns(si)
  __pyx_v_server_wall_ns = qwp_reader_server_info_server_wall_ns(__pyx_v_si);
+0708:     qwp_reader_server_info_cluster_id(si, &buf, &buf_len)
  qwp_reader_server_info_cluster_id(__pyx_v_si, (&__pyx_v_buf), (&__pyx_v_buf_len));
+0709:     cluster_id = PyUnicode_FromStringAndSize(buf, <Py_ssize_t>buf_len) \
    __pyx_t_3 = PyUnicode_FromStringAndSize(__pyx_v_buf, ((Py_ssize_t)__pyx_v_buf_len)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 709, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__7);
    __pyx_t_2 = __pyx_mstate_global->__pyx_kp_u__7;
  }
  __pyx_v_cluster_id = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+0710:         if buf != NULL else ''
  __pyx_t_1 = (__pyx_v_buf != NULL);
  if (__pyx_t_1) {
+0711:     buf = NULL
  __pyx_v_buf = NULL;
+0712:     buf_len = 0
  __pyx_v_buf_len = 0;
+0713:     qwp_reader_server_info_node_id(si, &buf, &buf_len)
  qwp_reader_server_info_node_id(__pyx_v_si, (&__pyx_v_buf), (&__pyx_v_buf_len));
+0714:     node_id = PyUnicode_FromStringAndSize(buf, <Py_ssize_t>buf_len) \
    __pyx_t_3 = PyUnicode_FromStringAndSize(__pyx_v_buf, ((Py_ssize_t)__pyx_v_buf_len)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 714, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__7);
    __pyx_t_2 = __pyx_mstate_global->__pyx_kp_u__7;
  }
  __pyx_v_node_id = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+0715:         if buf != NULL else ''
  __pyx_t_1 = (__pyx_v_buf != NULL);
  if (__pyx_t_1) {
+0716:     buf = NULL
  __pyx_v_buf = NULL;
+0717:     buf_len = 0
  __pyx_v_buf_len = 0;
+0718:     zone_id = None
  __Pyx_INCREF(Py_None);
  __pyx_v_zone_id = ((PyObject*)Py_None);
+0719:     if qwp_reader_server_info_zone_id(si, &buf, &buf_len):
  __pyx_t_1 = qwp_reader_server_info_zone_id(__pyx_v_si, (&__pyx_v_buf), (&__pyx_v_buf_len));
  if (__pyx_t_1) {
/* … */
  }
+0720:         zone_id = PyUnicode_FromStringAndSize(buf, <Py_ssize_t>buf_len) \
      __pyx_t_3 = PyUnicode_FromStringAndSize(__pyx_v_buf, ((Py_ssize_t)__pyx_v_buf_len)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __pyx_t_3;
      __pyx_t_3 = 0;
    } else {
      __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__7);
      __pyx_t_2 = __pyx_mstate_global->__pyx_kp_u__7;
    }
    __Pyx_DECREF_SET(__pyx_v_zone_id, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;
+0721:             if buf != NULL else ''
    __pyx_t_1 = (__pyx_v_buf != NULL);
    if (__pyx_t_1) {
+0722:     return ServerInfo(
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_ServerInfo); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
 0723:         role=role,
+0724:         role_byte=role_byte,
  __pyx_t_4 = __Pyx_PyLong_From_uint8_t(__pyx_v_role_byte); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
+0725:         epoch=epoch,
  __pyx_t_5 = __Pyx_PyLong_From_uint64_t(__pyx_v_epoch); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
+0726:         capabilities=capabilities,
  __pyx_t_10 = __Pyx_PyLong_From_uint32_t(__pyx_v_capabilities); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
+0727:         server_wall_ns=server_wall_ns,
  __pyx_t_11 = __Pyx_PyLong_From_int64_t(__pyx_v_server_wall_ns); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
 0728:         cluster_id=cluster_id,
 0729:         node_id=node_id,
+0730:         zone_id=zone_id)
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 8 : 0)] = {__pyx_t_3, NULL};
    __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(8); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_role, __pyx_v_role, __pyx_t_12, __pyx_callargs+1, 0) < (0)) __PYX_ERR(2, 722, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_role_byte, __pyx_t_4, __pyx_t_12, __pyx_callargs+1, 1) < (0)) __PYX_ERR(2, 722, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_epoch, __pyx_t_5, __pyx_t_12, __pyx_callargs+1, 2) < (0)) __PYX_ERR(2, 722, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_capabilities, __pyx_t_10, __pyx_t_12, __pyx_callargs+1, 3) < (0)) __PYX_ERR(2, 722, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_server_wall_ns, __pyx_t_11, __pyx_t_12, __pyx_callargs+1, 4) < (0)) __PYX_ERR(2, 722, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_cluster_id, __pyx_v_cluster_id, __pyx_t_12, __pyx_callargs+1, 5) < (0)) __PYX_ERR(2, 722, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_node_id, __pyx_v_node_id, __pyx_t_12, __pyx_callargs+1, 6) < (0)) __PYX_ERR(2, 722, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_zone_id, __pyx_v_zone_id, __pyx_t_12, __pyx_callargs+1, 7) < (0)) __PYX_ERR(2, 722, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 722, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0731: 
 0732: 
+0733: cdef void _failover_reset_trampoline(
static void __pyx_f_7questdb_7_client__failover_reset_trampoline(CYTHON_UNUSED struct qwp_reader_failover_reset_event const *__pyx_v_event, void *__pyx_v_user_data) {
/* … */
  /* function exit code */
  __pyx_L0:;
}
 0734:         const qwp_reader_failover_reset_event* event,
 0735:         void* user_data) noexcept nogil:
 0736:     # Fires synchronously inside qwp_reader_cursor_next_batch while the
 0737:     # reader re-executes on a new endpoint, before the replayed batch-0
 0738:     # arrives. Honour the C reentrancy contract: no reentrant FFI on the
 0739:     # reader/query/cursor, no exception escapes, non-blocking. user_data is
 0740:     # a raw int* at the cursor's _reset_seq counter; bumping it is a plain
 0741:     # pointer write (no GIL, no Python object touched). Once the handle is
 0742:     # published, every cursor drive call holds its RLock, so this write is
 0743:     # covered by the same cross-thread hand-off boundary as the native call.
 0744:     # The materialise-whole accumulator polls it to discard its pre-failover
 0745:     # batches.
+0746:     if user_data == NULL:
  __pyx_t_1 = (__pyx_v_user_data == NULL);
  if (__pyx_t_1) {
/* … */
  }
+0747:         return
    goto __pyx_L0;
+0748:     (<int*>user_data)[0] += 1
  __pyx_t_2 = ((int *)__pyx_v_user_data);
  __pyx_t_3 = 0;
  (__pyx_t_2[__pyx_t_3]) = ((__pyx_t_2[__pyx_t_3]) + 1);
 0749: 
 0750: 
+0751: cdef int64_t _EPOCH_ORDINAL = 719163  # datetime.date(1970, 1, 1).toordinal()
  __pyx_v_7questdb_7_client__EPOCH_ORDINAL = 0xAF93B;
 0752: 
 0753: 
+0754: cdef void_int _bind_decimal(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__bind_decimal(struct qwp_reader_query *__pyx_v_query, PyObject *__pyx_v_value, Py_ssize_t __pyx_v_idx) {
  PyObject *__pyx_v_le_bytes = 0;
  PyObject *__pyx_v_sign = NULL;
  PyObject *__pyx_v_digits = NULL;
  PyObject *__pyx_v_exponent = NULL;
  PyObject *__pyx_v_scale = NULL;
  PyObject *__pyx_v_ndigits = NULL;
  PyObject *__pyx_v_mantissa = NULL;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("questdb._client._bind_decimal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_le_bytes);
  __Pyx_XDECREF(__pyx_v_sign);
  __Pyx_XDECREF(__pyx_v_digits);
  __Pyx_XDECREF(__pyx_v_exponent);
  __Pyx_XDECREF(__pyx_v_scale);
  __Pyx_XDECREF(__pyx_v_ndigits);
  __Pyx_XDECREF(__pyx_v_mantissa);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0755:         qwp_reader_query* query, object value, Py_ssize_t idx) except -1:
 0756:     """Bind a ``decimal.Decimal`` as the narrowest DECIMAL that holds it:
 0757:     DECIMAL64 up to 18 digits, DECIMAL128 up to 38, DECIMAL256 up to 76,
 0758:     with the fractional digits as the scale. Read off ``as_tuple()`` so the
 0759:     decimal context's precision never rounds the value.
 0760:     """
 0761:     cdef bytes le_bytes
+0762:     if not decimal.Decimal.is_finite(value):
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_decimal); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 762, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 762, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_value};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_finite, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(2, 762, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_7 = (!__pyx_t_6);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+0763:         raise ValueError(
    __pyx_t_4 = NULL;
+0764:             f'query bind ${idx}: DECIMAL has no NaN or infinity: {value!r}')
    __pyx_t_2 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 764, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 764, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_query_bind;
    __pyx_t_8[1] = __pyx_t_2;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_DECIMAL_has_no_NaN_or_infinity;
    __pyx_t_8[3] = __pyx_t_3;
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 4, 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 34 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
    if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 764, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_9};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 763, __pyx_L1_error)
+0765:     sign, digits, exponent = decimal.Decimal.as_tuple(value)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_decimal); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_value};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_as_tuple, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(2, 765, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1);
      __Pyx_INCREF(__pyx_t_9);
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2);
      __Pyx_INCREF(__pyx_t_4);
    } else {
      __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 765, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 765, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_9);
      __pyx_t_4 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 765, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_4);
    }
    #else
    __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_4 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_2);
    index = 0; __pyx_t_3 = __pyx_t_10(__pyx_t_2); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_9 = __pyx_t_10(__pyx_t_2); if (unlikely(!__pyx_t_9)) goto __pyx_L4_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_9);
    index = 2; __pyx_t_4 = __pyx_t_10(__pyx_t_2); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_2), 3) < (0)) __PYX_ERR(2, 765, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L5_unpacking_done;
    __pyx_L4_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(2, 765, __pyx_L1_error)
    __pyx_L5_unpacking_done:;
  }
  __pyx_v_sign = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_digits = __pyx_t_9;
  __pyx_t_9 = 0;
  __pyx_v_exponent = __pyx_t_4;
  __pyx_t_4 = 0;
+0766:     if digits == (0,):
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_digits, __pyx_mstate_global->__pyx_tuple[5], Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 766, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(2, 766, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_7) {
/* … */
  }
/* … */
  __pyx_mstate_global->__pyx_tuple[5] = PyTuple_Pack(1, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_mstate_global->__pyx_tuple[5])) __PYX_ERR(2, 766, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[5]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[5]);
+0767:         exponent = max(min(exponent, 0), -76)
    __pyx_t_11 = -76L;
    __pyx_t_12 = 0;
    __Pyx_INCREF(__pyx_v_exponent);
    __pyx_t_1 = __pyx_v_exponent;
    __pyx_t_9 = __Pyx_PyLong_From_long(__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_9, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 767, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(2, 767, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_7) {
      __pyx_t_3 = __Pyx_PyLong_From_long(__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 767, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __pyx_t_3;
      __pyx_t_3 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_4 = __pyx_t_1;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_3 = __Pyx_PyLong_From_long(__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 767, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(2, 767, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_7) {
      __pyx_t_9 = __Pyx_PyLong_From_long(__pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 767, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_4 = __pyx_t_9;
      __pyx_t_9 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_4 = __pyx_t_1;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __pyx_t_4;
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_exponent, __pyx_t_1);
    __pyx_t_1 = 0;
+0768:     scale = max(-exponent, 0)
  __pyx_t_11 = 0;
  __pyx_t_1 = PyNumber_Negative(__pyx_v_exponent); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = __Pyx_PyLong_From_long(__pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_9, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 768, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(2, 768, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_7) {
    __pyx_t_3 = __Pyx_PyLong_From_long(__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_4 = __pyx_t_1;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_scale = __pyx_t_1;
  __pyx_t_1 = 0;
+0769:     ndigits = len(digits) + max(exponent, 0)
  __pyx_t_13 = PyObject_Length(__pyx_v_digits); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(2, 769, __pyx_L1_error)
  __pyx_t_1 = PyLong_FromSsize_t(__pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_11 = 0;
  __Pyx_INCREF(__pyx_v_exponent);
  __pyx_t_4 = __pyx_v_exponent;
  __pyx_t_9 = __Pyx_PyLong_From_long(__pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_9, __pyx_t_4, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 769, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(2, 769, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_7) {
    __pyx_t_2 = __Pyx_PyLong_From_long(__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_3 = __pyx_t_4;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Add(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_ndigits = __pyx_t_4;
  __pyx_t_4 = 0;
+0770:     if scale > 76:
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_scale, __pyx_mstate_global->__pyx_int_76, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 770, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(2, 770, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+0771:         raise ValueError(
    __pyx_t_3 = NULL;
+0772:             f'query bind ${idx}: {value!r} has scale {scale}; the widest '
    __pyx_t_1 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_scale, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_query_bind;
    __pyx_t_14[1] = __pyx_t_1;
    __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_;
    __pyx_t_14[3] = __pyx_t_2;
    __pyx_t_14[4] = __pyx_mstate_global->__pyx_kp_u_has_scale;
    __pyx_t_14[5] = __pyx_t_9;
    __pyx_t_14[6] = __pyx_mstate_global->__pyx_kp_u_the_widest_QuestDB_DECIMAL_hold;
    __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_14, 7, 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 43, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9));
    if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_15};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 771, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(2, 771, __pyx_L1_error)
 0773:             f'QuestDB DECIMAL holds scale 76')
+0774:     if ndigits > 76:
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_ndigits, __pyx_mstate_global->__pyx_int_76, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 774, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(2, 774, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+0775:         raise ValueError(
    __pyx_t_15 = NULL;
+0776:             f'query bind ${idx}: {value!r} has {ndigits} digits; the widest '
    __pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 776, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_value), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 776, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_ndigits, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 776, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_query_bind;
    __pyx_t_14[1] = __pyx_t_3;
    __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_;
    __pyx_t_14[3] = __pyx_t_9;
    __pyx_t_14[4] = __pyx_mstate_global->__pyx_kp_u_has;
    __pyx_t_14[5] = __pyx_t_2;
    __pyx_t_14[6] = __pyx_mstate_global->__pyx_kp_u_digits_the_widest_QuestDB_DECIM;
    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_14, 7, 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 5 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 51, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2));
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 776, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_t_1};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 775, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(2, 775, __pyx_L1_error)
 0777:             f'QuestDB DECIMAL holds 76 digits')
+0778:     mantissa = int(''.join(map(str, digits))) * 10 ** max(exponent, 0)
  __pyx_t_1 = NULL;
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_1, ((PyObject *)(&PyUnicode_Type)), __pyx_v_digits};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_map, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_1 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__7, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_11 = 0;
  __Pyx_INCREF(__pyx_v_exponent);
  __pyx_t_1 = __pyx_v_exponent;
  __pyx_t_2 = __Pyx_PyLong_From_long(__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_9 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 778, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(2, 778, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__pyx_t_7) {
    __pyx_t_9 = __Pyx_PyLong_From_long(__pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_15 = __pyx_t_9;
    __pyx_t_9 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_15 = __pyx_t_1;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Power(__pyx_mstate_global->__pyx_int_10, __pyx_t_15, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = PyNumber_Multiply(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_mantissa = __pyx_t_15;
  __pyx_t_15 = 0;
+0779:     if sign:
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_sign); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(2, 779, __pyx_L1_error)
  if (__pyx_t_7) {
/* … */
  }
+0780:         mantissa = -mantissa
    __pyx_t_15 = PyNumber_Negative(__pyx_v_mantissa); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF_SET(__pyx_v_mantissa, __pyx_t_15);
    __pyx_t_15 = 0;
+0781:     if ndigits <= 18 and scale <= 18:
  __pyx_t_15 = PyObject_RichCompare(__pyx_v_ndigits, __pyx_mstate_global->__pyx_int_18, Py_LE); __Pyx_XGOTREF(__pyx_t_15); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 781, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(2, 781, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (__pyx_t_6) {
  } else {
    __pyx_t_7 = __pyx_t_6;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_15 = PyObject_RichCompare(__pyx_v_scale, __pyx_mstate_global->__pyx_int_18, Py_LE); __Pyx_XGOTREF(__pyx_t_15); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 781, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(2, 781, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_7 = __pyx_t_6;
  __pyx_L11_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
    goto __pyx_L10;
  }
+0782:         qwp_reader_query_bind_decimal64(query, mantissa, scale)
    __pyx_t_16 = __Pyx_PyLong_As_int64_t(__pyx_v_mantissa); if (unlikely((__pyx_t_16 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 782, __pyx_L1_error)
    __pyx_t_17 = __Pyx_PyLong_As_int8_t(__pyx_v_scale); if (unlikely((__pyx_t_17 == ((int8_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 782, __pyx_L1_error)
    qwp_reader_query_bind_decimal64(__pyx_v_query, __pyx_t_16, __pyx_t_17);
+0783:     elif ndigits <= 38 and scale <= 38:
  __pyx_t_15 = PyObject_RichCompare(__pyx_v_ndigits, __pyx_mstate_global->__pyx_int_38, Py_LE); __Pyx_XGOTREF(__pyx_t_15); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 783, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(2, 783, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (__pyx_t_6) {
  } else {
    __pyx_t_7 = __pyx_t_6;
    goto __pyx_L13_bool_binop_done;
  }
  __pyx_t_15 = PyObject_RichCompare(__pyx_v_scale, __pyx_mstate_global->__pyx_int_38, Py_LE); __Pyx_XGOTREF(__pyx_t_15); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 783, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(2, 783, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_7 = __pyx_t_6;
  __pyx_L13_bool_binop_done:;
  if (__pyx_t_7) {
/* … */
    goto __pyx_L10;
  }
+0784:         qwp_reader_query_bind_decimal128(
    qwp_reader_query_bind_decimal128(__pyx_v_query, __pyx_t_18, __pyx_t_16, __pyx_t_17);
+0785:             query, mantissa & 0xFFFFFFFFFFFFFFFF, mantissa >> 64, scale)
    __pyx_t_15 = PyNumber_And(__pyx_v_mantissa, __pyx_mstate_global->__pyx_int_0xffffffffffffffff); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 785, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_18 = __Pyx_PyLong_As_uint64_t(__pyx_t_15); if (unlikely((__pyx_t_18 == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 785, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = PyNumber_Rshift(__pyx_v_mantissa, __pyx_mstate_global->__pyx_int_64); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 785, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_16 = __Pyx_PyLong_As_int64_t(__pyx_t_15); if (unlikely((__pyx_t_16 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 785, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_17 = __Pyx_PyLong_As_int8_t(__pyx_v_scale); if (unlikely((__pyx_t_17 == ((int8_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 785, __pyx_L1_error)
 0786:     else:
+0787:         le_bytes = mantissa.to_bytes(32, 'little', signed=True)
  /*else*/ {
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_mantissa, __pyx_mstate_global->__pyx_n_u_to_bytes); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 787, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 787, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_signed, Py_True) < (0)) __PYX_ERR(2, 787, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_mstate_global->__pyx_tuple[6], __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 787, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_4))) __PYX_ERR(2, 787, __pyx_L1_error)
    __pyx_v_le_bytes = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  __pyx_mstate_global->__pyx_tuple[6] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_int_32, __pyx_mstate_global->__pyx_n_u_little); if (unlikely(!__pyx_mstate_global->__pyx_tuple[6])) __PYX_ERR(2, 787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[6]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[6]);
+0788:         qwp_reader_query_bind_decimal256(
    qwp_reader_query_bind_decimal256(__pyx_v_query, ((uint8_t const *)__pyx_t_19), __pyx_t_17);
  }
  __pyx_L10:;
+0789:             query, <const uint8_t*>PyBytes_AsString(le_bytes), scale)
    __pyx_t_19 = PyBytes_AsString(__pyx_v_le_bytes); if (unlikely(__pyx_t_19 == ((void *)NULL))) __PYX_ERR(2, 789, __pyx_L1_error)
    __pyx_t_17 = __Pyx_PyLong_As_int8_t(__pyx_v_scale); if (unlikely((__pyx_t_17 == ((int8_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 789, __pyx_L1_error)
+0790:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 0791: 
 0792: 
+0793: cdef void_int _bind_query_params(qwp_reader_query* query, object binds) except -1:
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__bind_query_params(struct qwp_reader_query *__pyx_v_query, PyObject *__pyx_v_binds) {
  PyObject *__pyx_v_utf8 = 0;
  PyObject *__pyx_v_uuid_bytes = 0;
  struct line_sender_utf8 __pyx_v_c_utf8;
  struct line_sender_error *__pyx_v_utf8_err;
  Py_ssize_t __pyx_v_idx;
  PyObject *__pyx_v_value = NULL;
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client._bind_query_params", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_utf8);
  __Pyx_XDECREF(__pyx_v_uuid_bytes);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0794:     """Append positional binds matching the SQL's ``$1``..``$N`` placeholders.
 0795: 
 0796:     Bind calls follow the C ABI's deferred-error contract (they return
 0797:     void; the only native-side failure surfaces from execute), so the only
 0798:     errors raised here are Python-side type rejections.
 0799:     """
 0800:     cdef bytes utf8
 0801:     cdef bytes uuid_bytes
 0802:     cdef line_sender_utf8 c_utf8
+0803:     cdef line_sender_error* utf8_err = NULL
  __pyx_v_utf8_err = NULL;
+0804:     cdef Py_ssize_t idx = 0
  __pyx_v_idx = 0;
+0805:     for value in binds:
  if (likely(PyList_CheckExact(__pyx_v_binds)) || PyTuple_CheckExact(__pyx_v_binds)) {
    __pyx_t_1 = __pyx_v_binds; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_binds); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 805, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 805, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_2;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 805, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
        #endif
        ++__pyx_t_2;
      }
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 805, __pyx_L1_error)
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 805, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_4);
    __pyx_t_4 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0806:         idx += 1
    __pyx_v_idx = (__pyx_v_idx + 1);
+0807:         if value is None:
    __pyx_t_5 = (__pyx_v_value == Py_None);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
+0808:             qwp_reader_query_bind_null_varchar(query)
      qwp_reader_query_bind_null_varchar(__pyx_v_query);
+0809:         elif value is True or value is False:
    __pyx_t_6 = (__pyx_v_value == Py_True);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_5 = __pyx_t_6;
      goto __pyx_L6_bool_binop_done;
    }
    __pyx_t_6 = (__pyx_v_value == Py_False);
    __pyx_t_5 = __pyx_t_6;
    __pyx_L6_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
+0810:             qwp_reader_query_bind_bool(query, value)
      __pyx_t_7 = __Pyx_PyLong_As_bool(__pyx_v_value); if (unlikely((__pyx_t_7 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(2, 810, __pyx_L1_error)
      qwp_reader_query_bind_bool(__pyx_v_query, __pyx_t_7);
+0811:         elif isinstance(value, int):
    __pyx_t_5 = PyLong_Check(__pyx_v_value); 
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
+0812:             if value < INT64_MIN or value > INT64_MAX:
      __pyx_t_4 = __Pyx_PyLong_From_int64_t(INT64_MIN); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 812, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = PyObject_RichCompare(__pyx_v_value, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 812, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(2, 812, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (!__pyx_t_6) {
      } else {
        __pyx_t_5 = __pyx_t_6;
        goto __pyx_L9_bool_binop_done;
      }
      __pyx_t_8 = __Pyx_PyLong_From_int64_t(INT64_MAX); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 812, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_4 = PyObject_RichCompare(__pyx_v_value, __pyx_t_8, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 812, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(2, 812, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_5 = __pyx_t_6;
      __pyx_L9_bool_binop_done:;
      if (unlikely(__pyx_t_5)) {
/* … */
      }
+0813:                 raise OverflowError(
        __pyx_t_8 = NULL;
+0814:                     f'query bind ${idx}: int out of the signed 64-bit '
        __pyx_t_9 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 814, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
/* … */
        __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_11, 4, 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 60 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10));
        if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 814, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_13 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_12};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (__pyx_t_13*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 813, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_Raise(__pyx_t_4, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __PYX_ERR(2, 813, __pyx_L1_error)
+0815:                     f'range QuestDB LONG supports: {value}')
        __pyx_t_10 = __Pyx_PyObject_FormatSimple(__pyx_v_value, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 815, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11[0] = __pyx_mstate_global->__pyx_kp_u_query_bind;
        __pyx_t_11[1] = __pyx_t_9;
        __pyx_t_11[2] = __pyx_mstate_global->__pyx_kp_u_int_out_of_the_signed_64_bit_ra;
        __pyx_t_11[3] = __pyx_t_10;
+0816:             qwp_reader_query_bind_i64(query, value)
      __pyx_t_14 = __Pyx_PyLong_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_14 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 816, __pyx_L1_error)
      qwp_reader_query_bind_i64(__pyx_v_query, __pyx_t_14);
+0817:         elif isinstance(value, float):
    __pyx_t_5 = PyFloat_Check(__pyx_v_value); 
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
+0818:             qwp_reader_query_bind_f64(query, value)
      __pyx_t_15 = __Pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 818, __pyx_L1_error)
      qwp_reader_query_bind_f64(__pyx_v_query, __pyx_t_15);
+0819:         elif isinstance(value, str):
    __pyx_t_5 = PyUnicode_Check(__pyx_v_value); 
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
+0820:             utf8 = value.encode('utf-8')
      __pyx_t_12 = __pyx_v_value;
      __Pyx_INCREF(__pyx_t_12);
      __pyx_t_13 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_mstate_global->__pyx_kp_u_utf_8};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 820, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_4))) __PYX_ERR(2, 820, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_utf8, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
+0821:             if not line_sender_utf8_init(
      __pyx_t_5 = (!line_sender_utf8_init((&__pyx_v_c_utf8), ((size_t)__pyx_t_16), ((char const *)__pyx_t_17), (&__pyx_v_utf8_err)));
      if (unlikely(__pyx_t_5)) {
/* … */
      }
 0822:                     &c_utf8,
+0823:                     <size_t>len(utf8),
      if (unlikely(__pyx_v_utf8 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
        __PYX_ERR(2, 823, __pyx_L1_error)
      }
      __pyx_t_16 = __Pyx_PyBytes_GET_SIZE(__pyx_v_utf8); if (unlikely(__pyx_t_16 == ((Py_ssize_t)-1))) __PYX_ERR(2, 823, __pyx_L1_error)
+0824:                     <const char*>utf8,
      if (unlikely(__pyx_v_utf8 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
        __PYX_ERR(2, 824, __pyx_L1_error)
      }
      __pyx_t_17 = __Pyx_PyBytes_AsString(__pyx_v_utf8); if (unlikely((!__pyx_t_17) && PyErr_Occurred())) __PYX_ERR(2, 824, __pyx_L1_error)
 0825:                     &utf8_err):
+0826:                 raise c_err_to_py(utf8_err)
        __pyx_t_4 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_utf8_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 826, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_Raise(__pyx_t_4, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __PYX_ERR(2, 826, __pyx_L1_error)
+0827:             qwp_reader_query_bind_varchar(query, c_utf8)
      qwp_reader_query_bind_varchar(__pyx_v_query, __pyx_v_c_utf8);
+0828:         elif isinstance(value, TimestampNanos):
    __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampNanos); 
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
+0829:             qwp_reader_query_bind_timestamp_nanos(query, value.value)
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 829, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_14 = __Pyx_PyLong_As_int64_t(__pyx_t_4); if (unlikely((__pyx_t_14 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 829, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      qwp_reader_query_bind_timestamp_nanos(__pyx_v_query, __pyx_t_14);
+0830:         elif isinstance(value, TimestampMicros):
    __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_TimestampMicros); 
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
+0831:             qwp_reader_query_bind_timestamp_micros(query, value.value)
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 831, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_14 = __Pyx_PyLong_As_int64_t(__pyx_t_4); if (unlikely((__pyx_t_14 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 831, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      qwp_reader_query_bind_timestamp_micros(__pyx_v_query, __pyx_t_14);
+0832:         elif isinstance(value, datetime.datetime):
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = PyObject_IsInstance(__pyx_v_value, __pyx_t_12); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 832, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
+0833:             qwp_reader_query_bind_timestamp_micros(
      qwp_reader_query_bind_timestamp_micros(__pyx_v_query, __pyx_t_14);
+0834:                 query, datetime_to_micros(value))
      if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(2, 834, __pyx_L1_error)
      __pyx_t_14 = __pyx_f_7questdb_7_client_datetime_to_micros(((PyDateTime_DateTime *)__pyx_v_value)); if (unlikely(__pyx_t_14 == ((int64_t)-1L) && PyErr_Occurred())) __PYX_ERR(2, 834, __pyx_L1_error)
+0835:         elif isinstance(value, uuid.UUID):
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_uuid); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_5 = PyObject_IsInstance(__pyx_v_value, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 835, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
 0836:             # The bind takes canonical RFC 4122 big-endian bytes, which is
 0837:             # exactly `UUID.bytes`; the native client byte-swaps them into
 0838:             # QWP wire order (lo half LE, then hi half LE).
+0839:             uuid_bytes = value.bytes
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_bytes); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 839, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_4))) __PYX_ERR(2, 839, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_uuid_bytes, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
 0840:             # `UUID.bytes` is a property a subclass can override, and the
 0841:             # bind reads exactly 16 bytes from the pointer, so the length
 0842:             # is checked before the buffer is handed over.
+0843:             if len(uuid_bytes) != 16:
      if (unlikely(__pyx_v_uuid_bytes == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
        __PYX_ERR(2, 843, __pyx_L1_error)
      }
      __pyx_t_16 = __Pyx_PyBytes_GET_SIZE(__pyx_v_uuid_bytes); if (unlikely(__pyx_t_16 == ((Py_ssize_t)-1))) __PYX_ERR(2, 843, __pyx_L1_error)
      __pyx_t_5 = (__pyx_t_16 != 16);
      if (unlikely(__pyx_t_5)) {
/* … */
      }
+0844:                 raise ValueError(
        __pyx_t_12 = NULL;
+0845:                     f'query bind ${idx}: uuid.UUID.bytes returned '
        __pyx_t_8 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 845, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
/* … */
        __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_18, 5, 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 27 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10) + 20, 127);
        if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 845, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_13 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_9};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (__pyx_t_13*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 844, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_Raise(__pyx_t_4, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __PYX_ERR(2, 844, __pyx_L1_error)
+0846:                     f'{len(uuid_bytes)} bytes, expected 16.')
        if (unlikely(__pyx_v_uuid_bytes == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
          __PYX_ERR(2, 846, __pyx_L1_error)
        }
        __pyx_t_16 = __Pyx_PyBytes_GET_SIZE(__pyx_v_uuid_bytes); if (unlikely(__pyx_t_16 == ((Py_ssize_t)-1))) __PYX_ERR(2, 846, __pyx_L1_error)
        __pyx_t_10 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_16, 0, ' ', 'd'); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 846, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_query_bind;
        __pyx_t_18[1] = __pyx_t_8;
        __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_uuid_UUID_bytes_returned;
        __pyx_t_18[3] = __pyx_t_10;
        __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u_bytes_expected_16;
+0847:             qwp_reader_query_bind_uuid(
      qwp_reader_query_bind_uuid(__pyx_v_query, ((uint8_t const *)__pyx_t_19));
+0848:                 query, <const uint8_t*>PyBytes_AsString(uuid_bytes))
      __pyx_t_19 = PyBytes_AsString(__pyx_v_uuid_bytes); if (unlikely(__pyx_t_19 == ((void *)NULL))) __PYX_ERR(2, 848, __pyx_L1_error)
+0849:         elif isinstance(value, datetime.date):
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_date); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = PyObject_IsInstance(__pyx_v_value, __pyx_t_9); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 849, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_5) {
/* … */
      goto __pyx_L5;
    }
 0850:             # datetime.datetime matched above; a plain date is a DATE.
+0851:             qwp_reader_query_bind_date_millis(
      qwp_reader_query_bind_date_millis(__pyx_v_query, __pyx_t_14);
+0852:                 query, (value.toordinal() - _EPOCH_ORDINAL) * 86_400_000)
      __pyx_t_4 = __pyx_v_value;
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_13 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
        __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_toordinal, __pyx_callargs+__pyx_t_13, (1-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 852, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __pyx_t_4 = __Pyx_PyLong_From_int64_t(__pyx_v_7questdb_7_client__EPOCH_ORDINAL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 852, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_12 = PyNumber_Subtract(__pyx_t_9, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 852, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyLong_MultiplyObjC(__pyx_t_12, __pyx_mstate_global->__pyx_int_86400000, 0x5265C00, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 852, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_14 = __Pyx_PyLong_As_int64_t(__pyx_t_4); if (unlikely((__pyx_t_14 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 852, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0853:         elif isinstance(value, decimal.Decimal):
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_decimal); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 853, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 853, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = PyObject_IsInstance(__pyx_v_value, __pyx_t_12); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 853, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (likely(__pyx_t_5)) {
/* … */
      goto __pyx_L5;
    }
+0854:             _bind_decimal(query, value, idx)
      __pyx_t_20 = __pyx_f_7questdb_7_client__bind_decimal(__pyx_v_query, __pyx_v_value, __pyx_v_idx); if (unlikely(__pyx_t_20 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 854, __pyx_L1_error)
 0855:         else:
+0856:             raise TypeError(
    /*else*/ {
      __pyx_t_4 = NULL;
+0857:                 f'query bind ${idx}: unsupported type '
      __pyx_t_9 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 857, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
/* … */
      __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_18, 5, 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 19 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 136, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8));
      if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 857, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_13 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_10};
        __pyx_t_12 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (__pyx_t_13*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 856, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
      }
      __Pyx_Raise(__pyx_t_12, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __PYX_ERR(2, 856, __pyx_L1_error)
    }
    __pyx_L5:;
+0858:                 f'{_fqn(type(value))}. Supported: None, bool, int, float, '
      __pyx_t_10 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_value)))); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_18[0] = __pyx_mstate_global->__pyx_kp_u_query_bind;
      __pyx_t_18[1] = __pyx_t_9;
      __pyx_t_18[2] = __pyx_mstate_global->__pyx_kp_u_unsupported_type;
      __pyx_t_18[3] = __pyx_t_8;
      __pyx_t_18[4] = __pyx_mstate_global->__pyx_kp_u_Supported_None_bool_int_float_s;
 0859:                 f'str, datetime.datetime, datetime.date, decimal.Decimal, '
 0860:                 f'TimestampMicros, TimestampNanos, uuid.UUID.')
+0861:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 0862: 
 0863: 
+0864: cdef int64_t _query_timeout_to_millis(object timeout) except -2:
static int64_t __pyx_f_7questdb_7_client__query_timeout_to_millis(PyObject *__pyx_v_timeout) {
  PyObject *__pyx_v_millis = 0;
  int64_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("questdb._client._query_timeout_to_millis", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2L;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_millis);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0865:     """``None`` → ``-1`` (keep the connect-string default); ``0`` clears it;
 0866:     a positive sub-millisecond ``timedelta`` rounds up to 1 ms."""
+0867:     cdef object millis = None
  __Pyx_INCREF(Py_None);
  __pyx_v_millis = Py_None;
+0868:     if timeout is None:
  __pyx_t_1 = (__pyx_v_timeout == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+0869:         return -1
    __pyx_r = -1L;
    goto __pyx_L0;
+0870:     if isinstance(timeout, datetime.timedelta):
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 870, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_timedelta); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 870, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_timeout, __pyx_t_3); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 870, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {
/* … */
  }
+0871:         if timeout < datetime.timedelta(0):
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_datetime); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 871, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_timedelta); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 871, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_2);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_int_0};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 871, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_5 = PyObject_RichCompare(__pyx_v_timeout, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 871, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 871, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+0872:             raise ValueError('timeout must not be negative')
      __pyx_t_3 = NULL;
      __pyx_t_6 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_timeout_must_not_be_negative};
        __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 872, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(2, 872, __pyx_L1_error)
+0873:         return <int64_t>_timedelta_to_millis(timeout)
    if (!(likely(((__pyx_v_timeout) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(2, 873, __pyx_L1_error)
    __pyx_t_7 = __pyx_f_7questdb_7_client__timedelta_to_millis(((PyDateTime_Delta *)__pyx_v_timeout)); if (unlikely(__pyx_t_7 == ((uint64_t)-1LL) && PyErr_Occurred())) __PYX_ERR(2, 873, __pyx_L1_error)
    __pyx_r = ((int64_t)__pyx_t_7);
    goto __pyx_L0;
+0874:     if not isinstance(timeout, (bool, numpy.bool_)):
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_numpy); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_bool_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_8 = __Pyx_TypeCheck(__pyx_v_timeout, __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool); 
  if (!__pyx_t_8) {
  } else {
    __pyx_t_1 = __pyx_t_8;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_8 = PyObject_IsInstance(__pyx_v_timeout, __pyx_t_3); 
  __pyx_t_1 = __pyx_t_8;
  __pyx_L7_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = (!__pyx_t_1);
  if (__pyx_t_8) {
/* … */
  }
+0875:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L14_try_end;
      __pyx_L9_error:;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_L11_except_error:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      goto __pyx_L1_error;
      __pyx_L10_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_L14_try_end:;
    }
+0876:             millis = operator.index(timeout)
        __pyx_t_5 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_operator); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 876, __pyx_L9_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 876, __pyx_L9_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_6 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          assert(__pyx_t_5);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
          __pyx_t_6 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_timeout};
          __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 876, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_DECREF_SET(__pyx_v_millis, __pyx_t_3);
        __pyx_t_3 = 0;
+0877:         except TypeError:
      __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_TypeError))));
      if (__pyx_t_12) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L10_exception_handled;
      }
      goto __pyx_L11_except_error;
 0878:             pass
+0879:     if millis is None:
  __pyx_t_8 = (__pyx_v_millis == Py_None);
  if (unlikely(__pyx_t_8)) {
/* … */
  }
+0880:         raise TypeError(
    __pyx_t_4 = NULL;
+0881:             'timeout must be an int (milliseconds), a '
    __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_timeout_must_be_an_int_milliseco, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 881, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 880, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 880, __pyx_L1_error)
+0882:             f'datetime.timedelta, or None, not {_fqn(type(timeout))}')
    __pyx_t_5 = __pyx_f_7questdb_7_client__fqn(((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_timeout)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 882, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 882, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0883:     if millis < 0:
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_millis, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 883, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(2, 883, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(__pyx_t_8)) {
/* … */
  }
+0884:         raise ValueError('timeout must not be negative')
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_timeout_must_not_be_negative};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 884, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 884, __pyx_L1_error)
+0885:     if millis > INT64_MAX:
  __pyx_t_3 = __Pyx_PyLong_From_int64_t(INT64_MAX); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyObject_RichCompare(__pyx_v_millis, __pyx_t_3, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 885, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(2, 885, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(__pyx_t_8)) {
/* … */
  }
+0886:         raise ValueError(
    __pyx_t_3 = NULL;
+0887:             f'timeout of {millis} ms exceeds the largest supported value '
    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_millis, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
/* … */
    __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_13, 5, 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 41 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 4, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4));
    if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_14};
      __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 886, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(2, 886, __pyx_L1_error)
+0888:             f'({INT64_MAX} ms)')
    __pyx_t_2 = __Pyx_PyUnicode_From_int64_t(INT64_MAX, 0, ' ', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 888, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_timeout_of;
    __pyx_t_13[1] = __pyx_t_4;
    __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u_ms_exceeds_the_largest_supporte;
    __pyx_t_13[3] = __pyx_t_2;
    __pyx_t_13[4] = __pyx_mstate_global->__pyx_kp_u_ms_2;
+0889:     return <int64_t>millis
  __pyx_t_15 = __Pyx_PyLong_As_int64_t(__pyx_v_millis); if (unlikely((__pyx_t_15 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 889, __pyx_L1_error)
  __pyx_r = ((int64_t)__pyx_t_15);
  goto __pyx_L0;
 0890: 
 0891: 
+0892: def _debug_query_timeout_to_millis(timeout):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_68_debug_query_timeout_to_millis(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_68_debug_query_timeout_to_millis = {"_debug_query_timeout_to_millis", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_68_debug_query_timeout_to_millis, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_68_debug_query_timeout_to_millis(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_timeout = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_query_timeout_to_millis (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_timeout,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 892, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 892, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_query_timeout_to_millis", 0) < (0)) __PYX_ERR(2, 892, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_query_timeout_to_millis", 1, 1, 1, i); __PYX_ERR(2, 892, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 892, __pyx_L3_error)
    }
    __pyx_v_timeout = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_query_timeout_to_millis", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 892, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_query_timeout_to_millis", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_67_debug_query_timeout_to_millis(__pyx_self, __pyx_v_timeout);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_67_debug_query_timeout_to_millis(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_timeout) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._debug_query_timeout_to_millis", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_68_debug_query_timeout_to_millis, 0, __pyx_mstate_global->__pyx_n_u_debug_query_timeout_to_millis, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[74])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_query_timeout_to_millis, __pyx_t_18) < (0)) __PYX_ERR(2, 892, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+0893:     return _query_timeout_to_millis(timeout)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7questdb_7_client__query_timeout_to_millis(__pyx_v_timeout); if (unlikely(__pyx_t_1 == ((int64_t)-2L))) __PYX_ERR(2, 893, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0894: 
 0895: 
+0896: cdef inline bint _execute_failed_before_send(questdb_error* err) noexcept:
static CYTHON_INLINE int __pyx_f_7questdb_7_client__execute_failed_before_send(questdb_error *__pyx_v_err) {
  questdb_error_code __pyx_v_code;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0897:     """Whether an execute failure happened before the request was written:
 0898:     `qwp_reader_query_execute` returns these codes only from its pre-write
 0899:     checks; a failed write is always `SocketError`."""
+0900:     cdef questdb_error_code code = questdb_error_get_code(err)
  __pyx_v_code = questdb_error_get_code(__pyx_v_err);
 0901:     return (
+0902:         code == line_sender_error_unsupported_server
    case line_sender_error_invalid_api_call:
+0903:         or code == line_sender_error_invalid_api_call
  switch (__pyx_v_code) {
    case line_sender_error_unsupported_server:
/* … */
    case line_sender_error_invalid_bind:
/* … */
    __pyx_t_1 = 1;
    break;
    default:
    __pyx_t_1 = 0;
    break;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
+0904:         or code == line_sender_error_invalid_bind
    case line_sender_error_invalid_utf8:
 0905:         or code == line_sender_error_invalid_utf8)
 0906: 
 0907: 
+0908: cdef _CursorHandle _execute_query(
static struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_f_7questdb_7_client__execute_query(struct __pyx_obj_7questdb_7_client__ReaderHandle *__pyx_v_reader_handle, PyObject *__pyx_v_sql, PyObject *__pyx_v_binds, struct __pyx_opt_args_7questdb_7_client__execute_query *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._execute_query", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sql_bytes);
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client__execute_query {
  int __pyx_n;
  int reset_symbol_dict;
  int owns_reader;
  int64_t timeout_ms;
};
 0909:         _ReaderHandle reader_handle, str sql, object binds,
+0910:         bint reset_symbol_dict=True, bint owns_reader=True,
  int __pyx_v_reset_symbol_dict = ((int)1);
  int __pyx_v_owns_reader = ((int)1);
  int64_t __pyx_v_timeout_ms = ((int64_t)-1L);
  PyObject *__pyx_v_sql_bytes = 0;
  struct line_sender_error *__pyx_v_utf8_err;
  struct line_sender_utf8 __pyx_v_sql_utf8;
  questdb_error *__pyx_v_err;
  struct qwp_reader_query *__pyx_v_query;
  struct qwp_reader_cursor *__pyx_v_cursor;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  int __pyx_v_was_armed;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_reset_symbol_dict = __pyx_optional_args->reset_symbol_dict;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_owns_reader = __pyx_optional_args->owns_reader;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_timeout_ms = __pyx_optional_args->timeout_ms;
        }
      }
    }
  }
 0911:         int64_t timeout_ms=-1):
 0912:     """Execute a SQL query and return a _CursorHandle.
 0913: 
 0914:     The query is prepared with an ``on_failover_reset`` trampoline that
 0915:     bumps the cursor's ``_reset_seq`` on a mid-query failover. The
 0916:     materialise-whole entry points poll it to discard their partial
 0917:     accumulation and replay-from-batch-0 transparently; the streaming
 0918:     entry points poll it to surface a clean ``FailoverWouldDuplicate``
 0919:     (the already-yielded batches can't be discarded). Installing the
 0920:     callback also clears the C-side silent-duplicate guard, so a
 0921:     post-delivery failover re-executes rather than aborting outright.
 0922:     """
+0923:     cdef bytes sql_bytes = sql.encode('utf-8')
  if (unlikely(__pyx_v_sql == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "encode");
    __PYX_ERR(2, 923, __pyx_L1_error)
  }
  __pyx_t_1 = PyUnicode_AsUTF8String(__pyx_v_sql); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_sql_bytes = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0924:     cdef line_sender_error* utf8_err = NULL
  __pyx_v_utf8_err = NULL;
 0925:     cdef line_sender_utf8 sql_utf8
+0926:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 0927:     cdef qwp_reader_query* query
 0928:     cdef qwp_reader_cursor* cursor
 0929: 
+0930:     if not line_sender_utf8_init(
  __pyx_t_4 = (!line_sender_utf8_init((&__pyx_v_sql_utf8), ((size_t)__pyx_t_2), ((char const *)((char *)__pyx_t_3)), (&__pyx_v_utf8_err)));
  if (unlikely(__pyx_t_4)) {
/* … */
  }
 0931:             &sql_utf8,
+0932:             <size_t>len(sql_bytes),
  __pyx_t_2 = __Pyx_PyBytes_GET_SIZE(__pyx_v_sql_bytes); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(2, 932, __pyx_L1_error)
+0933:             <const char*><char*>sql_bytes,
  __pyx_t_3 = __Pyx_PyBytes_AsWritableString(__pyx_v_sql_bytes); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(2, 933, __pyx_L1_error)
 0934:             &utf8_err):
+0935:         raise c_err_to_py(utf8_err)
    __pyx_t_1 = __pyx_f_7questdb_7_client_c_err_to_py(__pyx_v_utf8_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 935, __pyx_L1_error)
 0936: 
+0937:     cdef _CursorHandle handle = _CursorHandle()
  __pyx_t_5 = NULL;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 937, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
 0938: 
+0939:     with nogil:
  {
      PyThreadState * _save;
      _save = PyEval_SaveThread();
      __Pyx_FastGIL_Remember();
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_FastGIL_Forget();
          PyEval_RestoreThread(_save);
          goto __pyx_L6;
        }
        __pyx_L6:;
      }
  }
+0940:         query = qwp_reader_prepare(reader_handle._reader, sql_utf8, &err)
        __pyx_v_query = qwp_reader_prepare(__pyx_v_reader_handle->_reader, __pyx_v_sql_utf8, (&__pyx_v_err));
      }
 0941: 
+0942:     if query == NULL:
  __pyx_t_4 = (__pyx_v_query == NULL);
  if (__pyx_t_4) {
/* … */
  }
+0943:         if err == NULL:
    __pyx_t_4 = (__pyx_v_err == NULL);
    if (unlikely(__pyx_t_4)) {
/* … */
    }
+0944:             raise QuestDBError(
      __pyx_t_5 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 944, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+0945:                 QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 945, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 945, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_6 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_5);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_6 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_9, __pyx_mstate_global->__pyx_kp_u_qwp_reader_prepare_returned_NULL};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 944, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(2, 944, __pyx_L1_error)
 0946:                 'qwp_reader_prepare returned NULL without setting err')
+0947:         raise _reader_err_to_py(err)
    __pyx_t_1 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 947, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 947, __pyx_L1_error)
 0948: 
+0949:     if binds is not None:
  __pyx_t_4 = (__pyx_v_binds != Py_None);
  if (__pyx_t_4) {
/* … */
  }
+0950:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      goto __pyx_L15_try_end;
      __pyx_L10_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __pyx_L12_except_error:;
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      goto __pyx_L1_error;
      __pyx_L15_try_end:;
    }
+0951:             _bind_query_params(query, binds)
        __pyx_t_13 = __pyx_f_7questdb_7_client__bind_query_params(__pyx_v_query, __pyx_v_binds); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 951, __pyx_L10_error)
+0952:         except:
      /*except:*/ {
        __Pyx_AddTraceback("questdb._client._execute_query", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_9) < 0) __PYX_ERR(2, 952, __pyx_L12_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_9);
+0953:             qwp_reader_query_free(query)
        qwp_reader_query_free(__pyx_v_query);
+0954:             raise
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_7, __pyx_t_9);
        __pyx_t_1 = 0;  __pyx_t_7 = 0;  __pyx_t_9 = 0; 
        __PYX_ERR(2, 954, __pyx_L12_except_error)
      }
 0955: 
+0956:     qwp_reader_query_set_reset_symbol_dict(query, reset_symbol_dict)
  qwp_reader_query_set_reset_symbol_dict(__pyx_v_query, __pyx_v_reset_symbol_dict);
 0957: 
+0958:     if timeout_ms >= 0:
  __pyx_t_4 = (__pyx_v_timeout_ms >= 0);
  if (__pyx_t_4) {
/* … */
  }
+0959:         qwp_reader_query_set_timeout_ms(query, <uint64_t>timeout_ms)
    qwp_reader_query_set_timeout_ms(__pyx_v_query, ((uint64_t)__pyx_v_timeout_ms));
 0960: 
+0961:     qwp_reader_query_on_failover_reset(
  qwp_reader_query_on_failover_reset(__pyx_v_query, __pyx_f_7questdb_7_client__failover_reset_trampoline, ((void *)(&__pyx_v_handle->_reset_seq)));
 0962:         query, _failover_reset_trampoline, <void*>&handle._reset_seq)
 0963: 
 0964:     # Mark the reader unrecyclable only once we cross the network boundary:
 0965:     # a client-side failure above (bad SQL/bind) leaves the reader clean, so
 0966:     # a pooled lease must not drop a healthy connection over it.
+0967:     cdef bint was_armed = reader_handle._must_close
  __pyx_t_4 = __pyx_v_reader_handle->_must_close;
  __pyx_v_was_armed = __pyx_t_4;
+0968:     reader_handle._must_close = True
  __pyx_v_reader_handle->_must_close = 1;
 0969: 
+0970:     with nogil:
  {
      PyThreadState * _save;
      _save = PyEval_SaveThread();
      __Pyx_FastGIL_Remember();
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_FastGIL_Forget();
          PyEval_RestoreThread(_save);
          goto __pyx_L21;
        }
        __pyx_L21:;
      }
  }
+0971:         cursor = qwp_reader_query_execute(&query, &err)
        __pyx_v_cursor = qwp_reader_query_execute((&__pyx_v_query), (&__pyx_v_err));
      }
 0972: 
+0973:     if cursor == NULL:
  __pyx_t_4 = (__pyx_v_cursor == NULL);
  if (__pyx_t_4) {
/* … */
  }
 0974:         # _query_execute consumes the query (nulls *query_inout); the
 0975:         # defensive free is a no-op on the consumed handle.
+0976:         qwp_reader_query_free(query)
    qwp_reader_query_free(__pyx_v_query);
+0977:         if err == NULL:
    __pyx_t_4 = (__pyx_v_err == NULL);
    if (unlikely(__pyx_t_4)) {
/* … */
    }
+0978:             raise QuestDBError(
      __pyx_t_7 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 978, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
+0979:                 QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 979, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 979, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_6 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
        assert(__pyx_t_7);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
        __pyx_t_6 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_qwp_reader_query_execute_returne};
        __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 978, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __Pyx_Raise(__pyx_t_9, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __PYX_ERR(2, 978, __pyx_L1_error)
 0980:                 'qwp_reader_query_execute returned NULL without setting err')
+0981:         if _execute_failed_before_send(err):
    __pyx_t_4 = __pyx_f_7questdb_7_client__execute_failed_before_send(__pyx_v_err);
    if (__pyx_t_4) {
/* … */
    }
 0982:             # Nothing reached the socket: the connection is exactly as
 0983:             # healthy as before this call, so hand back whatever state the
 0984:             # previous query left rather than dropping it.
+0985:             reader_handle._must_close = was_armed
      __pyx_v_reader_handle->_must_close = __pyx_v_was_armed;
+0986:         raise _reader_err_to_py(err)
    __pyx_t_9 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 986, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_Raise(__pyx_t_9, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __PYX_ERR(2, 986, __pyx_L1_error)
 0987: 
+0988:     handle._attach(cursor, reader_handle, owns_reader)
  ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_attach(__pyx_v_handle, __pyx_v_cursor, __pyx_v_reader_handle, __pyx_v_owns_reader);
+0989:     _oidc_raise_unscheduled_main()
  __pyx_t_13 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_13 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 989, __pyx_L1_error)
+0990:     return handle
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_handle);
  __pyx_r = __pyx_v_handle;
  goto __pyx_L0;
 0991: 
 0992: 
+0993: cdef enum:
enum  {
+0994:     _ARROW_METADATA_CLONE_CAP = 1 << 20
  __pyx_e_7questdb_7_client__ARROW_METADATA_CLONE_CAP = (1 << 20)
};
 0995: 
 0996: 
+0997: cdef size_t _arrow_metadata_byte_len(
static size_t __pyx_f_7questdb_7_client__arrow_metadata_byte_len(char const *__pyx_v_md, size_t __pyx_v_max_len, int32_t *__pyx_v_kept_n) {
  int32_t __pyx_v_n;
  int32_t __pyx_v_klen;
  int32_t __pyx_v_vlen;
  size_t __pyx_v_pos;
  int32_t __pyx_v_i;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0998:         const char* md, size_t max_len, int32_t* kept_n) noexcept:
 0999:     cdef int32_t n
 1000:     cdef int32_t klen
 1001:     cdef int32_t vlen
 1002:     cdef size_t pos
 1003:     cdef int32_t i
+1004:     kept_n[0] = 0
  (__pyx_v_kept_n[0]) = 0;
+1005:     if max_len < sizeof(int32_t):
  __pyx_t_1 = (__pyx_v_max_len < (sizeof(int32_t)));
  if (__pyx_t_1) {
/* … */
  }
+1006:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+1007:     memcpy(&n, md, sizeof(int32_t))
  (void)(memcpy((&__pyx_v_n), __pyx_v_md, (sizeof(int32_t))));
+1008:     pos = sizeof(int32_t)
  __pyx_v_pos = (sizeof(int32_t));
+1009:     if n <= 0:
  __pyx_t_1 = (__pyx_v_n <= 0);
  if (__pyx_t_1) {
/* … */
  }
+1010:         return pos
    __pyx_r = __pyx_v_pos;
    goto __pyx_L0;
+1011:     for i in range(n):
  __pyx_t_2 = __pyx_v_n;
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i = __pyx_t_4;
+1012:         if max_len - pos < sizeof(int32_t):
    __pyx_t_1 = ((__pyx_v_max_len - __pyx_v_pos) < (sizeof(int32_t)));
    if (__pyx_t_1) {
/* … */
    }
+1013:             return pos
      __pyx_r = __pyx_v_pos;
      goto __pyx_L0;
+1014:         memcpy(&klen, md + pos, sizeof(int32_t))
    (void)(memcpy((&__pyx_v_klen), (__pyx_v_md + __pyx_v_pos), (sizeof(int32_t))));
+1015:         if klen < 0 or <size_t>klen > max_len - pos - sizeof(int32_t):
    __pyx_t_5 = (__pyx_v_klen < 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_1 = __pyx_t_5;
      goto __pyx_L9_bool_binop_done;
    }
    __pyx_t_5 = (((size_t)__pyx_v_klen) > ((__pyx_v_max_len - __pyx_v_pos) - (sizeof(int32_t))));
    __pyx_t_1 = __pyx_t_5;
    __pyx_L9_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
+1016:             return pos
      __pyx_r = __pyx_v_pos;
      goto __pyx_L0;
+1017:         pos += sizeof(int32_t) + <size_t>klen
    __pyx_v_pos = (__pyx_v_pos + ((sizeof(int32_t)) + ((size_t)__pyx_v_klen)));
+1018:         if max_len - pos < sizeof(int32_t):
    __pyx_t_1 = ((__pyx_v_max_len - __pyx_v_pos) < (sizeof(int32_t)));
    if (__pyx_t_1) {
/* … */
    }
+1019:             return pos
      __pyx_r = __pyx_v_pos;
      goto __pyx_L0;
+1020:         memcpy(&vlen, md + pos, sizeof(int32_t))
    (void)(memcpy((&__pyx_v_vlen), (__pyx_v_md + __pyx_v_pos), (sizeof(int32_t))));
+1021:         if vlen < 0 or <size_t>vlen > max_len - pos - sizeof(int32_t):
    __pyx_t_5 = (__pyx_v_vlen < 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_1 = __pyx_t_5;
      goto __pyx_L13_bool_binop_done;
    }
    __pyx_t_5 = (((size_t)__pyx_v_vlen) > ((__pyx_v_max_len - __pyx_v_pos) - (sizeof(int32_t))));
    __pyx_t_1 = __pyx_t_5;
    __pyx_L13_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
+1022:             return pos
      __pyx_r = __pyx_v_pos;
      goto __pyx_L0;
+1023:         pos += sizeof(int32_t) + <size_t>vlen
    __pyx_v_pos = (__pyx_v_pos + ((sizeof(int32_t)) + ((size_t)__pyx_v_vlen)));
+1024:         kept_n[0] = i + 1
    (__pyx_v_kept_n[0]) = (__pyx_v_i + 1);
  }
+1025:     return pos
  __pyx_r = __pyx_v_pos;
  goto __pyx_L0;
 1026: 
 1027: 
+1028: cdef void _arrow_schema_clone_release(ArrowSchema* schema) noexcept:
static void __pyx_f_7questdb_7_client__arrow_schema_clone_release(struct ArrowSchema *__pyx_v_schema) {
  int64_t __pyx_v_i;
/* … */
  /* function exit code */
}
 1029:     cdef int64_t i
+1030:     if schema.format != NULL:
  __pyx_t_1 = (__pyx_v_schema->format != NULL);
  if (__pyx_t_1) {
/* … */
  }
+1031:         free(<void*>schema.format)
    free(((void *)__pyx_v_schema->format));
+1032:         schema.format = NULL
    __pyx_v_schema->format = NULL;
+1033:     if schema.name != NULL:
  __pyx_t_1 = (__pyx_v_schema->name != NULL);
  if (__pyx_t_1) {
/* … */
  }
+1034:         free(<void*>schema.name)
    free(((void *)__pyx_v_schema->name));
+1035:         schema.name = NULL
    __pyx_v_schema->name = NULL;
+1036:     if schema.metadata != NULL:
  __pyx_t_1 = (__pyx_v_schema->metadata != NULL);
  if (__pyx_t_1) {
/* … */
  }
+1037:         free(<void*>schema.metadata)
    free(((void *)__pyx_v_schema->metadata));
+1038:         schema.metadata = NULL
    __pyx_v_schema->metadata = NULL;
+1039:     if schema.children != NULL:
  __pyx_t_1 = (__pyx_v_schema->children != NULL);
  if (__pyx_t_1) {
/* … */
  }
+1040:         for i in range(schema.n_children):
    __pyx_t_2 = __pyx_v_schema->n_children;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_v_i = __pyx_t_4;
+1041:             if schema.children[i] != NULL:
      __pyx_t_1 = ((__pyx_v_schema->children[__pyx_v_i]) != NULL);
      if (__pyx_t_1) {
/* … */
      }
    }
+1042:                 if schema.children[i].release != NULL:
        __pyx_t_1 = ((__pyx_v_schema->children[__pyx_v_i])->release != NULL);
        if (__pyx_t_1) {
/* … */
        }
+1043:                     schema.children[i].release(schema.children[i])
          (__pyx_v_schema->children[__pyx_v_i])->release((__pyx_v_schema->children[__pyx_v_i]));
+1044:                 free(schema.children[i])
        free((__pyx_v_schema->children[__pyx_v_i]));
+1045:         free(schema.children)
    free(__pyx_v_schema->children);
+1046:         schema.children = NULL
    __pyx_v_schema->children = NULL;
+1047:     if schema.dictionary != NULL:
  __pyx_t_1 = (__pyx_v_schema->dictionary != NULL);
  if (__pyx_t_1) {
/* … */
  }
+1048:         if schema.dictionary.release != NULL:
    __pyx_t_1 = (__pyx_v_schema->dictionary->release != NULL);
    if (__pyx_t_1) {
/* … */
    }
+1049:             schema.dictionary.release(schema.dictionary)
      __pyx_v_schema->dictionary->release(__pyx_v_schema->dictionary);
+1050:         free(schema.dictionary)
    free(__pyx_v_schema->dictionary);
+1051:         schema.dictionary = NULL
    __pyx_v_schema->dictionary = NULL;
+1052:     schema.release = NULL
  __pyx_v_schema->release = NULL;
 1053: 
 1054: 
+1055: cdef int _arrow_schema_deep_clone(const ArrowSchema* src, ArrowSchema* dst) noexcept:
static int __pyx_f_7questdb_7_client__arrow_schema_deep_clone(struct ArrowSchema const *__pyx_v_src, struct ArrowSchema *__pyx_v_dst) {
  size_t __pyx_v_format_len;
  size_t __pyx_v_name_len;
  size_t __pyx_v_metadata_len;
  int32_t __pyx_v_kept_n;
  int64_t __pyx_v_i;
  struct ArrowSchema *__pyx_v_child;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 1056:     cdef size_t format_len
 1057:     cdef size_t name_len
 1058:     cdef size_t metadata_len
 1059:     cdef int32_t kept_n
 1060:     cdef int64_t i
 1061:     cdef ArrowSchema* child
+1062:     memset(dst, 0, sizeof(ArrowSchema))
  (void)(memset(__pyx_v_dst, 0, (sizeof(struct ArrowSchema))));
+1063:     dst.flags = src.flags
  __pyx_t_1 = __pyx_v_src->flags;
  __pyx_v_dst->flags = __pyx_t_1;
+1064:     dst.n_children = src.n_children
  __pyx_t_1 = __pyx_v_src->n_children;
  __pyx_v_dst->n_children = __pyx_t_1;
+1065:     if src.format != NULL:
  __pyx_t_2 = (__pyx_v_src->format != NULL);
  if (__pyx_t_2) {
/* … */
  }
+1066:         format_len = strlen(src.format)
    __pyx_v_format_len = strlen(__pyx_v_src->format);
+1067:         dst.format = <const char*>malloc(format_len + 1)
    __pyx_v_dst->format = ((char const *)malloc((__pyx_v_format_len + 1)));
+1068:         if dst.format == NULL:
    __pyx_t_2 = (__pyx_v_dst->format == NULL);
    if (__pyx_t_2) {
/* … */
    }
+1069:             _arrow_schema_clone_release(dst)
      __pyx_f_7questdb_7_client__arrow_schema_clone_release(__pyx_v_dst);
+1070:             return -1
      __pyx_r = -1;
      goto __pyx_L0;
+1071:         memcpy(<void*>dst.format, src.format, format_len + 1)
    (void)(memcpy(((void *)__pyx_v_dst->format), __pyx_v_src->format, (__pyx_v_format_len + 1)));
+1072:     if src.name != NULL:
  __pyx_t_2 = (__pyx_v_src->name != NULL);
  if (__pyx_t_2) {
/* … */
  }
+1073:         name_len = strlen(src.name)
    __pyx_v_name_len = strlen(__pyx_v_src->name);
+1074:         dst.name = <const char*>malloc(name_len + 1)
    __pyx_v_dst->name = ((char const *)malloc((__pyx_v_name_len + 1)));
+1075:         if dst.name == NULL:
    __pyx_t_2 = (__pyx_v_dst->name == NULL);
    if (__pyx_t_2) {
/* … */
    }
+1076:             _arrow_schema_clone_release(dst)
      __pyx_f_7questdb_7_client__arrow_schema_clone_release(__pyx_v_dst);
+1077:             return -1
      __pyx_r = -1;
      goto __pyx_L0;
+1078:         memcpy(<void*>dst.name, src.name, name_len + 1)
    (void)(memcpy(((void *)__pyx_v_dst->name), __pyx_v_src->name, (__pyx_v_name_len + 1)));
+1079:     if src.metadata != NULL:
  __pyx_t_2 = (__pyx_v_src->metadata != NULL);
  if (__pyx_t_2) {
/* … */
  }
+1080:         metadata_len = _arrow_metadata_byte_len(
    __pyx_v_metadata_len = __pyx_f_7questdb_7_client__arrow_metadata_byte_len(__pyx_v_src->metadata, __pyx_e_7questdb_7_client__ARROW_METADATA_CLONE_CAP, (&__pyx_v_kept_n));
 1081:             src.metadata, _ARROW_METADATA_CLONE_CAP, &kept_n)
+1082:         dst.metadata = <const char*>malloc(metadata_len)
    __pyx_v_dst->metadata = ((char const *)malloc(__pyx_v_metadata_len));
+1083:         if dst.metadata == NULL:
    __pyx_t_2 = (__pyx_v_dst->metadata == NULL);
    if (__pyx_t_2) {
/* … */
    }
+1084:             _arrow_schema_clone_release(dst)
      __pyx_f_7questdb_7_client__arrow_schema_clone_release(__pyx_v_dst);
+1085:             return -1
      __pyx_r = -1;
      goto __pyx_L0;
+1086:         memcpy(<void*>dst.metadata, src.metadata, metadata_len)
    (void)(memcpy(((void *)__pyx_v_dst->metadata), __pyx_v_src->metadata, __pyx_v_metadata_len));
 1087:         # Keep the cloned block self-consistent: its leading key/value count
 1088:         # must never exceed the entries actually copied, or a downstream
 1089:         # consumer would read past the allocation.
+1090:         memcpy(<void*>dst.metadata, &kept_n, sizeof(int32_t))
    (void)(memcpy(((void *)__pyx_v_dst->metadata), (&__pyx_v_kept_n), (sizeof(int32_t))));
+1091:     if src.n_children > 0:
  __pyx_t_2 = (__pyx_v_src->n_children > 0);
  if (__pyx_t_2) {
/* … */
  }
+1092:         dst.children = <ArrowSchema**>calloc(
    __pyx_v_dst->children = ((struct ArrowSchema **)calloc(((size_t)__pyx_v_src->n_children), (sizeof(struct ArrowSchema *))));
 1093:             <size_t>src.n_children, sizeof(ArrowSchema*))
+1094:         if dst.children == NULL:
    __pyx_t_2 = (__pyx_v_dst->children == NULL);
    if (__pyx_t_2) {
/* … */
    }
+1095:             _arrow_schema_clone_release(dst)
      __pyx_f_7questdb_7_client__arrow_schema_clone_release(__pyx_v_dst);
+1096:             return -1
      __pyx_r = -1;
      goto __pyx_L0;
+1097:         for i in range(src.n_children):
    __pyx_t_1 = __pyx_v_src->n_children;
    __pyx_t_3 = __pyx_t_1;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_v_i = __pyx_t_4;
+1098:             child = <ArrowSchema*>malloc(sizeof(ArrowSchema))
      __pyx_v_child = ((struct ArrowSchema *)malloc((sizeof(struct ArrowSchema))));
+1099:             if child == NULL:
      __pyx_t_2 = (__pyx_v_child == NULL);
      if (__pyx_t_2) {
/* … */
      }
+1100:                 _arrow_schema_clone_release(dst)
        __pyx_f_7questdb_7_client__arrow_schema_clone_release(__pyx_v_dst);
+1101:                 return -1
        __pyx_r = -1;
        goto __pyx_L0;
+1102:             dst.children[i] = child
      (__pyx_v_dst->children[__pyx_v_i]) = __pyx_v_child;
+1103:             if _arrow_schema_deep_clone(src.children[i], child) != 0:
      __pyx_t_2 = (__pyx_f_7questdb_7_client__arrow_schema_deep_clone((__pyx_v_src->children[__pyx_v_i]), __pyx_v_child) != 0);
      if (__pyx_t_2) {
/* … */
      }
    }
+1104:                 _arrow_schema_clone_release(dst)
        __pyx_f_7questdb_7_client__arrow_schema_clone_release(__pyx_v_dst);
+1105:                 return -1
        __pyx_r = -1;
        goto __pyx_L0;
+1106:     if src.dictionary != NULL:
  __pyx_t_2 = (__pyx_v_src->dictionary != NULL);
  if (__pyx_t_2) {
/* … */
  }
+1107:         dst.dictionary = <ArrowSchema*>malloc(sizeof(ArrowSchema))
    __pyx_v_dst->dictionary = ((struct ArrowSchema *)malloc((sizeof(struct ArrowSchema))));
+1108:         if dst.dictionary == NULL:
    __pyx_t_2 = (__pyx_v_dst->dictionary == NULL);
    if (__pyx_t_2) {
/* … */
    }
+1109:             _arrow_schema_clone_release(dst)
      __pyx_f_7questdb_7_client__arrow_schema_clone_release(__pyx_v_dst);
+1110:             return -1
      __pyx_r = -1;
      goto __pyx_L0;
+1111:         if _arrow_schema_deep_clone(src.dictionary, dst.dictionary) != 0:
    __pyx_t_2 = (__pyx_f_7questdb_7_client__arrow_schema_deep_clone(__pyx_v_src->dictionary, __pyx_v_dst->dictionary) != 0);
    if (__pyx_t_2) {
/* … */
    }
+1112:             _arrow_schema_clone_release(dst)
      __pyx_f_7questdb_7_client__arrow_schema_clone_release(__pyx_v_dst);
+1113:             return -1
      __pyx_r = -1;
      goto __pyx_L0;
+1114:     dst.release = _arrow_schema_clone_release
  __pyx_v_dst->release = __pyx_f_7questdb_7_client__arrow_schema_clone_release;
+1115:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 1116: 
 1117: 
+1118: cdef class _QueryStreamProducer:
struct __pyx_obj_7questdb_7_client__QueryStreamProducer {
  PyObject_HEAD
  struct __pyx_vtabstruct_7questdb_7_client__QueryStreamProducer *__pyx_vtab;
  struct __pyx_obj_7questdb_7_client__CursorHandle *cursor_handle;
  struct ArrowSchema cached_schema;
  struct ArrowArray cached_array;
  int has_cached_schema;
  int has_cached_array;
  int exhausted;
  int delivered;
  char *last_error;
  PyObject *last_exc;
  int seen_seq;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client__QueryStreamProducer {
  void (*_free_cached)(struct __pyx_obj_7questdb_7_client__QueryStreamProducer *);
};
static struct __pyx_vtabstruct_7questdb_7_client__QueryStreamProducer *__pyx_vtabptr_7questdb_7_client__QueryStreamProducer;

 1119:     """Holder for the Rust-cursor-backed ArrowArrayStream.
 1120: 
 1121:     The Arrow stream struct itself is owned by the enclosing PyCapsule;
 1122:     this object owns just the cached `(schema, array)` and the
 1123:     `_CursorHandle` keep-alive. Refcount is bumped on capsule creation
 1124:     and dropped by the stream's release callback. Before that, a
 1125:     producer from `QueryResult.__arrow_c_schema__` is owned by the
 1126:     result. The cursor is freed when the stream reaches its end, or at
 1127:     release.
 1128:     """
 1129:     cdef _CursorHandle cursor_handle
 1130:     cdef ArrowSchema cached_schema
 1131:     cdef ArrowArray cached_array
 1132:     cdef bint has_cached_schema
 1133:     cdef bint has_cached_array
 1134:     cdef bint exhausted
 1135:     cdef bint delivered
 1136:     cdef char* last_error
 1137:     # The exception behind `last_error`, if there is one, so that a
 1138:     # Python-level caller (`QueryResult.__arrow_c_schema__`) can raise it
 1139:     # with its type and code.
 1140:     cdef object last_exc
 1141:     cdef int seen_seq
 1142: 
+1143:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_20_QueryStreamProducer_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_20_QueryStreamProducer_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_7questdb_7_client_20_QueryStreamProducer___cinit__(((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7_client_20_QueryStreamProducer___cinit__(struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1144:         self.cursor_handle = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->cursor_handle);
  __Pyx_DECREF((PyObject *)__pyx_v_self->cursor_handle);
  __pyx_v_self->cursor_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)Py_None);
+1145:         self.has_cached_schema = False
  __pyx_v_self->has_cached_schema = 0;
+1146:         self.has_cached_array = False
  __pyx_v_self->has_cached_array = 0;
+1147:         self.exhausted = False
  __pyx_v_self->exhausted = 0;
+1148:         self.delivered = False
  __pyx_v_self->delivered = 0;
+1149:         self.last_error = NULL
  __pyx_v_self->last_error = NULL;
+1150:         self.last_exc = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->last_exc);
  __Pyx_DECREF(__pyx_v_self->last_exc);
  __pyx_v_self->last_exc = Py_None;
+1151:         self.seen_seq = 0
  __pyx_v_self->seen_seq = 0;
+1152:         memset(&self.cached_schema, 0, sizeof(ArrowSchema))
  (void)(memset((&__pyx_v_self->cached_schema), 0, (sizeof(struct ArrowSchema))));
+1153:         memset(&self.cached_array, 0, sizeof(ArrowArray))
  (void)(memset((&__pyx_v_self->cached_array), 0, (sizeof(struct ArrowArray))));
 1154: 
+1155:     cdef void _free_cached(self) noexcept:
static void __pyx_f_7questdb_7_client_20_QueryStreamProducer__free_cached(struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_self) {
/* … */
  /* function exit code */
}
+1156:         if self.has_cached_schema:
  if (__pyx_v_self->has_cached_schema) {
/* … */
  }
+1157:             if self.cached_schema.release != NULL:
    __pyx_t_1 = (__pyx_v_self->cached_schema.release != NULL);
    if (__pyx_t_1) {
/* … */
    }
+1158:                 self.cached_schema.release(&self.cached_schema)
      __pyx_v_self->cached_schema.release((&__pyx_v_self->cached_schema));
+1159:             self.has_cached_schema = False
    __pyx_v_self->has_cached_schema = 0;
+1160:         if self.has_cached_array:
  if (__pyx_v_self->has_cached_array) {
/* … */
  }
+1161:             if self.cached_array.release != NULL:
    __pyx_t_1 = (__pyx_v_self->cached_array.release != NULL);
    if (__pyx_t_1) {
/* … */
    }
+1162:                 self.cached_array.release(&self.cached_array)
      __pyx_v_self->cached_array.release((&__pyx_v_self->cached_array));
+1163:             self.has_cached_array = False
    __pyx_v_self->has_cached_array = 0;
 1164: 
+1165:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_20_QueryStreamProducer_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_20_QueryStreamProducer_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_7questdb_7_client_20_QueryStreamProducer_2__dealloc__(((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_7questdb_7_client_20_QueryStreamProducer_2__dealloc__(struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_self) {
/* … */
  /* function exit code */
}
+1166:         self._free_cached()
  ((struct __pyx_vtabstruct_7questdb_7_client__QueryStreamProducer *)__pyx_v_self->__pyx_vtab)->_free_cached(__pyx_v_self);
+1167:         if self.last_error != NULL:
  __pyx_t_1 = (__pyx_v_self->last_error != NULL);
  if (__pyx_t_1) {
/* … */
  }
+1168:             free(self.last_error)
    free(__pyx_v_self->last_error);
+1169:             self.last_error = NULL
    __pyx_v_self->last_error = NULL;
 1170: 
 1171: 
+1172: cdef void _qs_set_error(
static void __pyx_f_7questdb_7_client__qs_set_error(struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod, char const *__pyx_v_msg, size_t __pyx_v_msg_len, struct __pyx_opt_args_7questdb_7_client__qs_set_error *__pyx_optional_args) {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("questdb._client._qs_set_error", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_7questdb_7_client__qs_set_error {
  int __pyx_n;
  PyObject *exc;
};
 1173:         _QueryStreamProducer prod, const char* msg, size_t msg_len,
+1174:         object exc=None) noexcept:
  PyObject *__pyx_v_exc = ((PyObject *)Py_None);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_exc = __pyx_optional_args->exc;
    }
  }
+1175:     if exc is not None:
  __pyx_t_1 = (__pyx_v_exc != Py_None);
  if (__pyx_t_1) {
/* … */
  }
 1176:         # A raised `exc` can reach the consumer's frames through its
 1177:         # traceback and context. If a frame holds the stream, that is a
 1178:         # cycle through the stream's C reference to `prod`, which the GC
 1179:         # cannot see: the cursor and its connection would never be freed.
+1180:         exc.__traceback__ = None
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_traceback, Py_None) < (0)) __PYX_ERR(2, 1180, __pyx_L1_error)
+1181:         exc.__context__ = None
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_context, Py_None) < (0)) __PYX_ERR(2, 1181, __pyx_L1_error)
+1182:         exc.__cause__ = None
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_cause, Py_None) < (0)) __PYX_ERR(2, 1182, __pyx_L1_error)
+1183:     prod.last_exc = exc
  __Pyx_INCREF(__pyx_v_exc);
  __Pyx_GIVEREF(__pyx_v_exc);
  __Pyx_GOTREF(__pyx_v_prod->last_exc);
  __Pyx_DECREF(__pyx_v_prod->last_exc);
  __pyx_v_prod->last_exc = __pyx_v_exc;
+1184:     if prod.last_error != NULL:
  __pyx_t_1 = (__pyx_v_prod->last_error != NULL);
  if (__pyx_t_1) {
/* … */
  }
+1185:         free(prod.last_error)
    free(__pyx_v_prod->last_error);
+1186:         prod.last_error = NULL
    __pyx_v_prod->last_error = NULL;
+1187:     prod.last_error = <char*>malloc(msg_len + 1)
  __pyx_v_prod->last_error = ((char *)malloc((__pyx_v_msg_len + 1)));
+1188:     if prod.last_error == NULL:
  __pyx_t_1 = (__pyx_v_prod->last_error == NULL);
  if (__pyx_t_1) {
/* … */
  }
+1189:         return
    goto __pyx_L0;
+1190:     memcpy(prod.last_error, msg, msg_len)
  (void)(memcpy(__pyx_v_prod->last_error, __pyx_v_msg, __pyx_v_msg_len));
+1191:     prod.last_error[msg_len] = 0
  (__pyx_v_prod->last_error[__pyx_v_msg_len]) = 0;
 1192: 
 1193: 
+1194: cdef int _qs_pull(_QueryStreamProducer prod) noexcept with gil:
static int __pyx_f_7questdb_7_client__qs_pull(struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod) {
  PyObject *__pyx_v_full = 0;
  int __pyx_v_status;
  PyObject *__pyx_v_e = NULL;
  int __pyx_r;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_INCREF((PyObject *)__pyx_v_prod);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_WriteUnraisable("questdb._client._qs_pull", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_full);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF((PyObject *)__pyx_v_prod);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}
 1195:     cdef bytes full
 1196:     cdef int status
+1197:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+1198:         status = _qs_pull_impl(prod)
      __pyx_t_4 = __pyx_f_7questdb_7_client__qs_pull_impl(__pyx_v_prod); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(2, 1198, __pyx_L3_error)
      __pyx_v_status = __pyx_t_4;
 1199:         # Native outputs/errors now have cleanup ownership, including on end
 1200:         # and error returns. A failed pending-call enqueue must not leave an
 1201:         # intercepted signal parked until an unrelated client operation.
+1202:         _oidc_raise_unscheduled_main()
      __pyx_t_5 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_5 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 1202, __pyx_L3_error)
+1203:         return status
      __pyx_r = __pyx_v_status;
      goto __pyx_L7_try_return;
+1204:     except BaseException as e:
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
    if (__pyx_t_4) {
      __Pyx_AddTraceback("questdb._client._qs_pull", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(2, 1204, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_v_e = __pyx_t_7;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L14_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
          if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_10, &__pyx_t_9);
          __Pyx_XGOTREF(__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_10);
          __Pyx_XGOTREF(__pyx_t_9);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __pyx_t_4 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_ErrRestore(__pyx_t_11, __pyx_t_10, __pyx_t_9);
          __pyx_t_11 = 0; __pyx_t_10 = 0; __pyx_t_9 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
          __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
          goto __pyx_L5_except_error;
        }
        __pyx_L13_return: {
          __pyx_t_18 = __pyx_r;
          __Pyx_DECREF(__pyx_v_e); __pyx_v_e = 0;
          __pyx_r = __pyx_t_18;
          goto __pyx_L6_except_return;
        }
      }
    }
    goto __pyx_L5_except_error;
 1205:         # A successful native pull may already have cached a batch. Discard it
 1206:         # so a subsequent get_next cannot deliver data after this stream error.
+1207:         prod._free_cached()
        ((struct __pyx_vtabstruct_7questdb_7_client__QueryStreamProducer *)__pyx_v_prod->__pyx_vtab)->_free_cached(__pyx_v_prod);
+1208:         try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          goto __pyx_L23_try_end;
          __pyx_L16_error:;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
/* … */
          __pyx_L18_except_error:;
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
          goto __pyx_L14_error;
          __pyx_L17_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
          __pyx_L23_try_end:;
        }
+1209:             full = ('arrow batch pull failed: ' + repr(e)).encode('utf-8')
            __pyx_t_12 = PyObject_Repr(__pyx_v_e); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1209, __pyx_L16_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_13 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_arrow_batch_pull_failed, __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 1209, __pyx_L16_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_t_12 = PyUnicode_AsUTF8String(((PyObject*)__pyx_t_13)); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1209, __pyx_L16_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __pyx_v_full = ((PyObject*)__pyx_t_12);
            __pyx_t_12 = 0;
+1210:             _qs_set_error(prod, full, <size_t>len(full), e)
            __pyx_t_14 = __Pyx_PyBytes_AsString(__pyx_v_full); if (unlikely((!__pyx_t_14) && PyErr_Occurred())) __PYX_ERR(2, 1210, __pyx_L16_error)
            __pyx_t_15 = __Pyx_PyBytes_GET_SIZE(__pyx_v_full); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(2, 1210, __pyx_L16_error)
            __pyx_t_16.__pyx_n = 1;
            __pyx_t_16.exc = __pyx_v_e;
            __pyx_f_7questdb_7_client__qs_set_error(__pyx_v_prod, __pyx_t_14, ((size_t)__pyx_t_15), &__pyx_t_16); 
+1211:         except:
          /*except:*/ {
            __Pyx_AddTraceback("questdb._client._qs_pull", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_17) < 0) __PYX_ERR(2, 1211, __pyx_L18_except_error)
            __Pyx_XGOTREF(__pyx_t_12);
            __Pyx_XGOTREF(__pyx_t_13);
            __Pyx_XGOTREF(__pyx_t_17);
+1212:             _qs_set_error(prod, b'arrow batch pull failed', 23)
            __pyx_f_7questdb_7_client__qs_set_error(__pyx_v_prod, __pyx_k_arrow_batch_pull_failed_2, 23, NULL);
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            goto __pyx_L17_exception_handled;
          }
+1213:         prod.exhausted = True
        __pyx_v_prod->exhausted = 1;
+1214:         return -1
        __pyx_r = -1;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L13_return;
      }
 1215: 
 1216: 
+1217: cdef int _qs_pull_impl(_QueryStreamProducer prod):
static int __pyx_f_7questdb_7_client__qs_pull_impl(struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod) {
  struct qwp_reader_cursor *__pyx_v_cursor;
  struct ArrowArray __pyx_v_local_array;
  struct ArrowSchema __pyx_v_local_schema;
  questdb_error *__pyx_v_err;
  enum qwp_reader_arrow_batch_result __pyx_v_result;
  PyObject *__pyx_v_full = 0;
  PyObject *__pyx_v_exc = 0;
  int __pyx_v_current_seq;
  PyObject *__pyx_v_fallback = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("questdb._client._qs_pull_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_full);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_v_fallback);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1218:     cdef qwp_reader_cursor* cursor
 1219:     cdef ArrowArray local_array
 1220:     cdef ArrowSchema local_schema
+1221:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 1222:     cdef qwp_reader_arrow_batch_result result
 1223:     cdef bytes full
 1224:     cdef object exc
 1225:     cdef int current_seq
+1226:     if prod.exhausted:
  if (__pyx_v_prod->exhausted) {
/* … */
  }
 1227:         # A prior error left a diagnostic pinned; keep surfacing it rather
 1228:         # than reporting a clean end-of-stream to a consumer that pulls again.
+1229:         if prod.last_error != NULL:
    __pyx_t_1 = (__pyx_v_prod->last_error != NULL);
    if (__pyx_t_1) {
/* … */
    }
+1230:             return -1
      __pyx_r = -1;
      goto __pyx_L0;
+1231:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+1232:     if prod.cursor_handle is None:
  __pyx_t_1 = (((PyObject *)__pyx_v_prod->cursor_handle) == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+1233:         _qs_set_error(prod, b'cursor is closed', 16)
    __pyx_f_7questdb_7_client__qs_set_error(__pyx_v_prod, __pyx_k_cursor_is_closed, 16, NULL);
+1234:         prod.exhausted = True
    __pyx_v_prod->exhausted = 1;
+1235:         return -1
    __pyx_r = -1;
    goto __pyx_L0;
+1236:     memset(&local_array, 0, sizeof(ArrowArray))
  (void)(memset((&__pyx_v_local_array), 0, (sizeof(struct ArrowArray))));
+1237:     memset(&local_schema, 0, sizeof(ArrowSchema))
  (void)(memset((&__pyx_v_local_schema), 0, (sizeof(struct ArrowSchema))));
+1238:     with prod.cursor_handle._lock:
  /*with:*/ {
    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_v_prod->cursor_handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = NULL;
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_prod->cursor_handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1238, __pyx_L6_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1238, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L15_try_end;
        __pyx_L10_error:;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client._qs_pull_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(2, 1238, __pyx_L12_except_error)
          __Pyx_XGOTREF(__pyx_t_3);
          __Pyx_XGOTREF(__pyx_t_5);
          __Pyx_XGOTREF(__pyx_t_4);
          __pyx_t_12 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1238, __pyx_L12_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_12, NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 1238, __pyx_L12_except_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_13);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          if (__pyx_t_1 < (0)) __PYX_ERR(2, 1238, __pyx_L12_except_error)
          __pyx_t_14 = (!__pyx_t_1);
          if (unlikely(__pyx_t_14)) {
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_XGIVEREF(__pyx_t_4);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_4);
            __pyx_t_3 = 0;  __pyx_t_5 = 0;  __pyx_t_4 = 0; 
            __PYX_ERR(2, 1238, __pyx_L12_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L11_exception_handled;
        }
        __pyx_L12_except_error:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L1_error;
        __pyx_L14_try_return:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L7_return;
        __pyx_L11_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_L15_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_2) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 1238, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L9;
      }
      __pyx_L7_return: {
        __pyx_t_15 = __pyx_r;
        if (__pyx_t_2) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 1238, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        __pyx_r = __pyx_t_15;
        goto __pyx_L0;
      }
      __pyx_L9:;
    }
    goto __pyx_L26;
    __pyx_L6_error:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L1_error;
    __pyx_L26:;
  }
+1239:         prod.cursor_handle._check_not_driving('arrow_stream')
          __pyx_t_10 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_prod->cursor_handle->__pyx_vtab)->_check_not_driving(__pyx_v_prod->cursor_handle, __pyx_mstate_global->__pyx_n_u_arrow_stream, NULL); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 1239, __pyx_L10_error)
+1240:         cursor = prod.cursor_handle._cursor
          __pyx_t_11 = __pyx_v_prod->cursor_handle->_cursor;
          __pyx_v_cursor = __pyx_t_11;
+1241:         if cursor == NULL:
          __pyx_t_1 = (__pyx_v_cursor == NULL);
          if (__pyx_t_1) {
/* … */
          }
+1242:             _qs_set_error(prod, b'cursor is closed', 16)
            __pyx_f_7questdb_7_client__qs_set_error(__pyx_v_prod, __pyx_k_cursor_is_closed, 16, NULL);
+1243:             prod.exhausted = True
            __pyx_v_prod->exhausted = 1;
+1244:             return -1
            __pyx_r = -1;
            goto __pyx_L14_try_return;
+1245:         prod.cursor_handle._native_in_flight = True
          __pyx_v_prod->cursor_handle->_native_in_flight = 1;
+1246:         prod.cursor_handle._pin()
          ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_prod->cursor_handle->__pyx_vtab)->_pin(__pyx_v_prod->cursor_handle);
+1247:         try:
          /*try:*/ {
+1248:             with nogil:
            {
                PyThreadState * _save;
                _save = PyEval_SaveThread();
                __Pyx_FastGIL_Remember();
                /*try:*/ {
/* … */
                /*finally:*/ {
                  /*normal exit:*/{
                    __Pyx_FastGIL_Forget();
                    PyEval_RestoreThread(_save);
                    goto __pyx_L22;
                  }
                  __pyx_L22:;
                }
            }
          }
+1249:                 result = qwp_reader_cursor_next_arrow_batch_compact(
                  __pyx_v_result = qwp_reader_cursor_next_arrow_batch_compact(__pyx_v_cursor, (&__pyx_v_local_array), (&__pyx_v_local_schema), (&__pyx_v_err));
                }
 1250:                     cursor, &local_array, &local_schema, &err)
 1251:         finally:
 1252:             # Cleared before `_unpin`, which may run a deferred free.
+1253:             prod.cursor_handle._native_in_flight = False
          /*finally:*/ {
            /*normal exit:*/{
              __pyx_v_prod->cursor_handle->_native_in_flight = 0;
+1254:             prod.cursor_handle._unpin()
              ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_prod->cursor_handle->__pyx_vtab)->_unpin(__pyx_v_prod->cursor_handle);
              goto __pyx_L19;
            }
            __pyx_L19:;
          }
+1255:     if result == qwp_reader_arrow_batch_ok:
  __pyx_t_14 = (__pyx_v_result == qwp_reader_arrow_batch_ok);
  if (__pyx_t_14) {
/* … */
  }
+1256:         current_seq = prod.cursor_handle._reset_sequence()
    __pyx_t_15 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_prod->cursor_handle->__pyx_vtab)->_reset_sequence(__pyx_v_prod->cursor_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1256, __pyx_L1_error)
    __pyx_v_current_seq = __pyx_t_15;
+1257:         if current_seq != prod.seen_seq:
    __pyx_t_14 = (__pyx_v_current_seq != __pyx_v_prod->seen_seq);
    if (__pyx_t_14) {
/* … */
    }
+1258:             if prod.delivered:
      if (__pyx_v_prod->delivered) {
/* … */
      }
 1259:                 # Mid-query failover replayed from batch-0 after batches
 1260:                 # were already handed to the consumer; this one would
 1261:                 # duplicate them. Streaming can't discard it — surface a
 1262:                 # clean error (tagged like other capsule errors) and stop.
+1263:                 if local_array.release != NULL:
        __pyx_t_14 = (__pyx_v_local_array.release != NULL);
        if (__pyx_t_14) {
/* … */
        }
+1264:                     local_array.release(&local_array)
          __pyx_v_local_array.release((&__pyx_v_local_array));
+1265:                 if local_schema.release != NULL:
        __pyx_t_14 = (__pyx_v_local_schema.release != NULL);
        if (__pyx_t_14) {
/* … */
        }
+1266:                     local_schema.release(&local_schema)
          __pyx_v_local_schema.release((&__pyx_v_local_schema));
+1267:                 try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          goto __pyx_L37_try_end;
          __pyx_L32_error:;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
          __pyx_L34_except_error:;
          __Pyx_XGIVEREF(__pyx_t_2);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_9, __pyx_t_8);
          goto __pyx_L1_error;
          __pyx_L33_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_2);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_9, __pyx_t_8);
          __pyx_L37_try_end:;
        }
+1268:                     exc = QuestDBError(
            __pyx_t_5 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1268, __pyx_L32_error)
            __Pyx_GOTREF(__pyx_t_3);
+1269:                         QuestDBErrorCode.FailoverWouldDuplicate,
            __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1269, __pyx_L32_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_FailoverWouldDuplicate); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 1269, __pyx_L32_error)
            __Pyx_GOTREF(__pyx_t_16);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_t_6 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_3))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
              assert(__pyx_t_5);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
              __pyx_t_6 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_16, __pyx_mstate_global->__pyx_kp_u_mid_query_failover_would_duplica};
              __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
              if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1268, __pyx_L32_error)
              __Pyx_GOTREF(__pyx_t_4);
            }
            __pyx_v_exc = __pyx_t_4;
            __pyx_t_4 = 0;
 1270:                         'mid-query failover would duplicate already-delivered '
 1271:                         'batches; re-issue the query')
+1272:                     full = _qs_error_text(exc)
            __pyx_t_4 = __pyx_f_7questdb_7_client__qs_error_text(__pyx_v_exc); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1272, __pyx_L32_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_v_full = ((PyObject*)__pyx_t_4);
            __pyx_t_4 = 0;
+1273:                     _qs_set_error(prod, full, <size_t>len(full), exc)
            if (unlikely(__pyx_v_full == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
              __PYX_ERR(2, 1273, __pyx_L32_error)
            }
            __pyx_t_17 = __Pyx_PyBytes_AsString(__pyx_v_full); if (unlikely((!__pyx_t_17) && PyErr_Occurred())) __PYX_ERR(2, 1273, __pyx_L32_error)
            if (unlikely(__pyx_v_full == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
              __PYX_ERR(2, 1273, __pyx_L32_error)
            }
            __pyx_t_18 = __Pyx_PyBytes_GET_SIZE(__pyx_v_full); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(2, 1273, __pyx_L32_error)
            __pyx_t_19.__pyx_n = 1;
            __pyx_t_19.exc = __pyx_v_exc;
            __pyx_f_7questdb_7_client__qs_set_error(__pyx_v_prod, __pyx_t_17, ((size_t)__pyx_t_18), &__pyx_t_19); 
+1274:                 except:
          /*except:*/ {
            __Pyx_AddTraceback("questdb._client._qs_pull_impl", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_16) < 0) __PYX_ERR(2, 1274, __pyx_L34_except_error)
            __Pyx_XGOTREF(__pyx_t_4);
            __Pyx_XGOTREF(__pyx_t_3);
            __Pyx_XGOTREF(__pyx_t_16);
 1275:                     fallback = (
+1276:                         b'[FailoverWouldDuplicate] mid-query failover would '
            __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_b_FailoverWouldDuplicate_mid_quer);
            __pyx_v_fallback = __pyx_mstate_global->__pyx_kp_b_FailoverWouldDuplicate_mid_quer;
 1277:                         b'duplicate already-delivered batches; re-issue the query')
+1278:                     _qs_set_error(prod, fallback, <size_t>len(fallback))
            __pyx_t_17 = __Pyx_PyBytes_AsString(__pyx_v_fallback); if (unlikely((!__pyx_t_17) && PyErr_Occurred())) __PYX_ERR(2, 1278, __pyx_L34_except_error)
            __pyx_t_18 = __Pyx_PyBytes_GET_SIZE(__pyx_v_fallback); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(2, 1278, __pyx_L34_except_error)
            __pyx_f_7questdb_7_client__qs_set_error(__pyx_v_prod, __pyx_t_17, ((size_t)__pyx_t_18), NULL);
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            goto __pyx_L33_exception_handled;
          }
+1279:                 prod.exhausted = True
        __pyx_v_prod->exhausted = 1;
+1280:                 return -1
        __pyx_r = -1;
        goto __pyx_L0;
 1281:             # Pre-delivery failover: nothing reached the consumer yet, so
 1282:             # re-pin to the replayed stream and restart from this batch-0.
+1283:             prod.seen_seq = current_seq
      __pyx_v_prod->seen_seq = __pyx_v_current_seq;
+1284:             prod._free_cached()
      ((struct __pyx_vtabstruct_7questdb_7_client__QueryStreamProducer *)__pyx_v_prod->__pyx_vtab)->_free_cached(__pyx_v_prod);
+1285:         if not prod.has_cached_schema:
    __pyx_t_14 = (!__pyx_v_prod->has_cached_schema);
    if (__pyx_t_14) {
/* … */
      goto __pyx_L40;
    }
+1286:             memcpy(&prod.cached_schema, &local_schema, sizeof(ArrowSchema))
      (void)(memcpy((&__pyx_v_prod->cached_schema), (&__pyx_v_local_schema), (sizeof(struct ArrowSchema))));
+1287:             prod.has_cached_schema = True
      __pyx_v_prod->has_cached_schema = 1;
 1288:         else:
+1289:             if local_schema.release != NULL:
    /*else*/ {
      __pyx_t_14 = (__pyx_v_local_schema.release != NULL);
      if (__pyx_t_14) {
/* … */
      }
    }
    __pyx_L40:;
+1290:                 local_schema.release(&local_schema)
        __pyx_v_local_schema.release((&__pyx_v_local_schema));
+1291:         if prod.has_cached_array and prod.cached_array.release != NULL:
    if (__pyx_v_prod->has_cached_array) {
    } else {
      __pyx_t_14 = __pyx_v_prod->has_cached_array;
      goto __pyx_L43_bool_binop_done;
    }
    __pyx_t_1 = (__pyx_v_prod->cached_array.release != NULL);
    __pyx_t_14 = __pyx_t_1;
    __pyx_L43_bool_binop_done:;
    if (__pyx_t_14) {
/* … */
    }
+1292:             prod.cached_array.release(&prod.cached_array)
      __pyx_v_prod->cached_array.release((&__pyx_v_prod->cached_array));
+1293:         memcpy(&prod.cached_array, &local_array, sizeof(ArrowArray))
    (void)(memcpy((&__pyx_v_prod->cached_array), (&__pyx_v_local_array), (sizeof(struct ArrowArray))));
+1294:         prod.has_cached_array = True
    __pyx_v_prod->has_cached_array = 1;
+1295:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+1296:     if result == qwp_reader_arrow_batch_end:
  __pyx_t_14 = (__pyx_v_result == qwp_reader_arrow_batch_end);
  if (__pyx_t_14) {
/* … */
  }
+1297:         prod.exhausted = True
    __pyx_v_prod->exhausted = 1;
+1298:         try:
    /*try:*/ {
+1299:             _mark_reader_drained(prod.cursor_handle)
      __pyx_t_16 = ((PyObject *)__pyx_v_prod->cursor_handle);
      __Pyx_INCREF(__pyx_t_16);
      __pyx_t_10 = __pyx_f_7questdb_7_client__mark_reader_drained(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_16)); if (unlikely(__pyx_t_10 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 1299, __pyx_L47_error)
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    }
 1300:         finally:
 1301:             # Free the cursor now, not at stream release: a pending
 1302:             # `__arrow_c_schema__` producer of a non-SELECT must not keep
 1303:             # a `PooledReader` lease busy.
+1304:             prod.cursor_handle._free()
    /*finally:*/ {
      /*normal exit:*/{
        ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_prod->cursor_handle->__pyx_vtab)->_free(__pyx_v_prod->cursor_handle);
        goto __pyx_L48;
      }
      __pyx_L47_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_2 = 0; __pyx_t_7 = 0; __pyx_t_13 = 0; __pyx_t_22 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_7, &__pyx_t_13, &__pyx_t_22);
        if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_2) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_2);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_22);
        __pyx_t_15 = __pyx_lineno; __pyx_t_20 = __pyx_clineno; __pyx_t_21 = __pyx_filename;
        {
          ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_prod->cursor_handle->__pyx_vtab)->_free(__pyx_v_prod->cursor_handle);
        }
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_22);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_13, __pyx_t_22);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_2);
        __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_2);
        __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_2 = 0; __pyx_t_7 = 0; __pyx_t_13 = 0; __pyx_t_22 = 0;
        __pyx_lineno = __pyx_t_15; __pyx_clineno = __pyx_t_20; __pyx_filename = __pyx_t_21;
        goto __pyx_L1_error;
      }
      __pyx_L48:;
    }
+1305:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+1306:     if err != NULL:
  __pyx_t_14 = (__pyx_v_err != NULL);
  if (__pyx_t_14) {
/* … */
    goto __pyx_L51;
  }
 1307:         # `_reader_err_to_py` frees `err`, also when it raises.
+1308:         exc = _reader_err_to_py(err)
    __pyx_t_16 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 1308, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __pyx_v_exc = __pyx_t_16;
    __pyx_t_16 = 0;
+1309:         err = NULL
    __pyx_v_err = NULL;
+1310:         full = _qs_error_text(exc)
    __pyx_t_16 = __pyx_f_7questdb_7_client__qs_error_text(__pyx_v_exc); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 1310, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __pyx_v_full = ((PyObject*)__pyx_t_16);
    __pyx_t_16 = 0;
+1311:         _qs_set_error(prod, full, <size_t>len(full), exc)
    if (unlikely(__pyx_v_full == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
      __PYX_ERR(2, 1311, __pyx_L1_error)
    }
    __pyx_t_17 = __Pyx_PyBytes_AsString(__pyx_v_full); if (unlikely((!__pyx_t_17) && PyErr_Occurred())) __PYX_ERR(2, 1311, __pyx_L1_error)
    if (unlikely(__pyx_v_full == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(2, 1311, __pyx_L1_error)
    }
    __pyx_t_18 = __Pyx_PyBytes_GET_SIZE(__pyx_v_full); if (unlikely(__pyx_t_18 == ((Py_ssize_t)-1))) __PYX_ERR(2, 1311, __pyx_L1_error)
    __pyx_t_19.__pyx_n = 1;
    __pyx_t_19.exc = __pyx_v_exc;
    __pyx_f_7questdb_7_client__qs_set_error(__pyx_v_prod, __pyx_t_17, ((size_t)__pyx_t_18), &__pyx_t_19); 
 1312:     else:
+1313:         _qs_set_error(
  /*else*/ {
/* … */
    __pyx_f_7questdb_7_client__qs_set_error(__pyx_v_prod, __pyx_k_arrow_batch_fetch_error_without, 39, NULL);
  }
  __pyx_L51:;
 1314:             prod,
 1315:             b'arrow batch fetch error without err_out', 39)
+1316:     prod.exhausted = True
  __pyx_v_prod->exhausted = 1;
+1317:     return -1
  __pyx_r = -1;
  goto __pyx_L0;
 1318: 
 1319: 
+1320: cdef bytes _qs_error_text(object exc):
static PyObject *__pyx_f_7questdb_7_client__qs_error_text(PyObject *__pyx_v_exc) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._qs_error_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1321:     # The C text of a stream error: "[CodeName] message".
+1322:     return ('[' + exc.code.name + '] ' + str(exc)).encode('utf-8')
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_mstate_global->__pyx_n_u_code); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Add(__pyx_mstate_global->__pyx_kp_u__22, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_mstate_global->__pyx_kp_u__23); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Unicode(__pyx_v_exc); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_5;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_6 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_utf_8};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1322, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_1))) __PYX_ERR(2, 1322, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1323: 
 1324: 
+1325: cdef int _qs_ensure_schema(_QueryStreamProducer prod) noexcept with gil:
static int __pyx_f_7questdb_7_client__qs_ensure_schema(struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod) {
  int __pyx_r;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_INCREF((PyObject *)__pyx_v_prod);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prod);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}
 1326:     # Pull the first batch if there is no schema yet. A result without a
 1327:     # batch (a non-SELECT) gets an empty struct schema.
+1328:     if not prod.has_cached_schema:
  __pyx_t_1 = (!__pyx_v_prod->has_cached_schema);
  if (__pyx_t_1) {
/* … */
  }
+1329:         if _qs_pull(prod) != 0:
    __pyx_t_1 = (__pyx_f_7questdb_7_client__qs_pull(__pyx_v_prod) != 0);
    if (__pyx_t_1) {
/* … */
    }
+1330:             return 5  # EIO
      __pyx_r = 5;
      goto __pyx_L0;
+1331:     if not prod.has_cached_schema:
  __pyx_t_1 = (!__pyx_v_prod->has_cached_schema);
  if (__pyx_t_1) {
/* … */
  }
+1332:         if _qs_install_empty_struct_schema(prod) != 0:
    __pyx_t_1 = (__pyx_f_7questdb_7_client__qs_install_empty_struct_schema(__pyx_v_prod) != 0);
    if (__pyx_t_1) {
/* … */
    }
+1333:             return 12  # ENOMEM
      __pyx_r = 12;
      goto __pyx_L0;
+1334:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 1335: 
 1336: 
+1337: cdef int _qs_get_schema(ArrowArrayStream* stream, ArrowSchema* out) noexcept with gil:
static int __pyx_f_7questdb_7_client__qs_get_schema(struct ArrowArrayStream *__pyx_v_stream, struct ArrowSchema *__pyx_v_out) {
  struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod = 0;
  int __pyx_v_rc;
  int __pyx_r;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prod);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}
 1338:     cdef _QueryStreamProducer prod
 1339:     cdef int rc
 1340:     # duckdb before 1.5 reads `out` even when this call fails.
+1341:     memset(out, 0, sizeof(ArrowSchema))
  (void)(memset(__pyx_v_out, 0, (sizeof(struct ArrowSchema))));
+1342:     if stream == NULL or stream.private_data == NULL:
  __pyx_t_2 = (__pyx_v_stream == NULL);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_stream->private_data == NULL);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+1343:         return 22  # EINVAL
    __pyx_r = 22;
    goto __pyx_L0;
+1344:     prod = <_QueryStreamProducer>stream.private_data
  __pyx_t_3 = ((PyObject *)__pyx_v_stream->private_data);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_prod = ((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_t_3);
  __pyx_t_3 = 0;
+1345:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L10_try_return:;
    goto __pyx_L0;
  }
+1346:         rc = _qs_ensure_schema(prod)
      __pyx_v_rc = __pyx_f_7questdb_7_client__qs_ensure_schema(__pyx_v_prod);
+1347:         if rc != 0:
      __pyx_t_1 = (__pyx_v_rc != 0);
      if (__pyx_t_1) {
/* … */
      }
+1348:             return rc
        __pyx_r = __pyx_v_rc;
        goto __pyx_L10_try_return;
+1349:         if _arrow_schema_deep_clone(&prod.cached_schema, out) != 0:
      __pyx_t_1 = (__pyx_f_7questdb_7_client__arrow_schema_deep_clone((&__pyx_v_prod->cached_schema), __pyx_v_out) != 0);
      if (__pyx_t_1) {
/* … */
      }
+1350:             _qs_set_error(prod, b'failed to clone ArrowSchema', 27)
        __pyx_f_7questdb_7_client__qs_set_error(__pyx_v_prod, __pyx_k_failed_to_clone_ArrowSchema, 27, NULL);
+1351:             return 12  # ENOMEM
        __pyx_r = 12;
        goto __pyx_L10_try_return;
+1352:         return 0
      __pyx_r = 0;
      goto __pyx_L10_try_return;
 1353:     except BaseException:
 1354:         _qs_set_error(prod, b'arrow schema fetch failed', 25)
 1355:         return 5  # EIO
 1356: 
 1357: 
+1358: cdef int _qs_install_empty_struct_schema(_QueryStreamProducer prod) noexcept:
static int __pyx_f_7questdb_7_client__qs_install_empty_struct_schema(struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod) {
  char *__pyx_v_fmt;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 1359:     """For an empty result set, fabricate a zero-column struct schema
 1360:     so consumers (polars / pyarrow) iterate to a clean end-of-stream
 1361:     instead of erroring on missing schema."""
+1362:     cdef char* fmt = <char*>malloc(3)
  __pyx_v_fmt = ((char *)malloc(3));
+1363:     if fmt == NULL:
  __pyx_t_1 = (__pyx_v_fmt == NULL);
  if (__pyx_t_1) {
/* … */
  }
+1364:         return -1
    __pyx_r = -1;
    goto __pyx_L0;
+1365:     fmt[0] = b'+'
  (__pyx_v_fmt[0]) = '+';
+1366:     fmt[1] = b's'
  (__pyx_v_fmt[1]) = 's';
+1367:     fmt[2] = 0
  (__pyx_v_fmt[2]) = 0;
+1368:     memset(&prod.cached_schema, 0, sizeof(ArrowSchema))
  (void)(memset((&__pyx_v_prod->cached_schema), 0, (sizeof(struct ArrowSchema))));
+1369:     prod.cached_schema.format = fmt
  __pyx_v_prod->cached_schema.format = __pyx_v_fmt;
+1370:     prod.cached_schema.release = _arrow_schema_clone_release
  __pyx_v_prod->cached_schema.release = __pyx_f_7questdb_7_client__arrow_schema_clone_release;
+1371:     prod.has_cached_schema = True
  __pyx_v_prod->has_cached_schema = 1;
+1372:     return 0
  __pyx_r = 0;
  goto __pyx_L0;
 1373: 
 1374: 
+1375: cdef int _qs_get_next(ArrowArrayStream* stream, ArrowArray* out) noexcept with gil:
static int __pyx_f_7questdb_7_client__qs_get_next(struct ArrowArrayStream *__pyx_v_stream, struct ArrowArray *__pyx_v_out) {
  struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod = 0;
  int __pyx_r;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prod);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}
 1376:     cdef _QueryStreamProducer prod
+1377:     memset(out, 0, sizeof(ArrowArray))
  (void)(memset(__pyx_v_out, 0, (sizeof(struct ArrowArray))));
+1378:     if stream == NULL or stream.private_data == NULL:
  __pyx_t_2 = (__pyx_v_stream == NULL);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_stream->private_data == NULL);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+1379:         return 22  # EINVAL
    __pyx_r = 22;
    goto __pyx_L0;
+1380:     prod = <_QueryStreamProducer>stream.private_data
  __pyx_t_3 = ((PyObject *)__pyx_v_stream->private_data);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_prod = ((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_t_3);
  __pyx_t_3 = 0;
+1381:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L10_try_return:;
    goto __pyx_L0;
  }
+1382:         if not prod.has_cached_array:
      __pyx_t_1 = (!__pyx_v_prod->has_cached_array);
      if (__pyx_t_1) {
/* … */
      }
+1383:             if _qs_pull(prod) != 0:
        __pyx_t_1 = (__pyx_f_7questdb_7_client__qs_pull(__pyx_v_prod) != 0);
        if (__pyx_t_1) {
/* … */
        }
+1384:                 return 5  # EIO
          __pyx_r = 5;
          goto __pyx_L10_try_return;
+1385:         if prod.has_cached_array:
      if (__pyx_v_prod->has_cached_array) {
/* … */
      }
+1386:             memcpy(out, &prod.cached_array, sizeof(ArrowArray))
        (void)(memcpy(__pyx_v_out, (&__pyx_v_prod->cached_array), (sizeof(struct ArrowArray))));
+1387:             memset(&prod.cached_array, 0, sizeof(ArrowArray))
        (void)(memset((&__pyx_v_prod->cached_array), 0, (sizeof(struct ArrowArray))));
+1388:             prod.has_cached_array = False
        __pyx_v_prod->has_cached_array = 0;
+1389:             prod.delivered = True
        __pyx_v_prod->delivered = 1;
+1390:             return 0
        __pyx_r = 0;
        goto __pyx_L10_try_return;
+1391:         return 0
      __pyx_r = 0;
      goto __pyx_L10_try_return;
 1392:     except BaseException:
 1393:         _qs_set_error(prod, b'arrow batch fetch failed', 24)
 1394:         return 5  # EIO
 1395: 
 1396: 
+1397: cdef const char* _qs_get_last_error(ArrowArrayStream* stream) noexcept with gil:
static char const *__pyx_f_7questdb_7_client__qs_get_last_error(struct ArrowArrayStream *__pyx_v_stream) {
  struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod = 0;
  char const *__pyx_r;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prod);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}
 1398:     cdef _QueryStreamProducer prod
+1399:     if stream == NULL or stream.private_data == NULL:
  __pyx_t_2 = (__pyx_v_stream == NULL);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_stream->private_data == NULL);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+1400:         return NULL
    __pyx_r = NULL;
    goto __pyx_L0;
+1401:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L10_try_return:;
    goto __pyx_L0;
  }
+1402:         prod = <_QueryStreamProducer>stream.private_data
      __pyx_t_6 = ((PyObject *)__pyx_v_stream->private_data);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_prod = ((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_t_6);
      __pyx_t_6 = 0;
+1403:         return <const char*>prod.last_error
      __pyx_r = ((char const *)__pyx_v_prod->last_error);
      goto __pyx_L10_try_return;
 1404:     except BaseException:
 1405:         return NULL
 1406: 
 1407: 
+1408: cdef void _qs_release(ArrowArrayStream* stream) noexcept with gil:
static void __pyx_f_7questdb_7_client__qs_release(struct ArrowArrayStream *__pyx_v_stream) {
  struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod = 0;
  PyObject *__pyx_v_exc_type;
  PyObject *__pyx_v_exc_value;
  PyObject *__pyx_v_exc_tb;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prod);
  __Pyx_RefNannyFinishContext();
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
}
 1409:     cdef _QueryStreamProducer prod
 1410:     cdef PyObject* exc_type
 1411:     cdef PyObject* exc_value
 1412:     cdef PyObject* exc_tb
+1413:     if stream == NULL or stream.private_data == NULL:
  __pyx_t_2 = (__pyx_v_stream == NULL);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_stream->private_data == NULL);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+1414:         return
    goto __pyx_L0;
 1415:     # A dropped capsule can be released while an exception propagates.
+1416:     PyErr_Fetch(&exc_type, &exc_value, &exc_tb)
  PyErr_Fetch((&__pyx_v_exc_type), (&__pyx_v_exc_value), (&__pyx_v_exc_tb));
+1417:     prod = <_QueryStreamProducer>stream.private_data
  __pyx_t_3 = ((PyObject *)__pyx_v_stream->private_data);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_prod = ((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_t_3);
  __pyx_t_3 = 0;
+1418:     stream.private_data = NULL
  __pyx_v_stream->private_data = NULL;
+1419:     stream.release = NULL
  __pyx_v_stream->release = NULL;
+1420:     if prod.cursor_handle is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_prod->cursor_handle) != Py_None);
  if (__pyx_t_1) {
/* … */
  }
+1421:         _reclaim_cursor_no_wait(prod.cursor_handle)
    __pyx_t_3 = ((PyObject *)__pyx_v_prod->cursor_handle);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_f_7questdb_7_client__reclaim_cursor_no_wait(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_3));
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1422:     try:
  {
    /*try:*/ {
/* … */
    }
  }
+1423:         Py_DECREF(prod)
      Py_DECREF(((PyObject *)__pyx_v_prod));
 1424:     except BaseException:
 1425:         pass
+1426:     PyErr_Restore(exc_type, exc_value, exc_tb)
  PyErr_Restore(__pyx_v_exc_type, __pyx_v_exc_value, __pyx_v_exc_tb);
 1427: 
 1428: 
+1429: cdef void _qs_capsule_destructor(object capsule) noexcept:
static void __pyx_f_7questdb_7_client__qs_capsule_destructor(PyObject *__pyx_v_capsule) {
  struct ArrowArrayStream *__pyx_v_stream;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("questdb._client._qs_capsule_destructor", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
}
 1430:     cdef ArrowArrayStream* stream
+1431:     if not PyCapsule_IsValid(capsule, b'arrow_array_stream'):
  __pyx_t_1 = (!PyCapsule_IsValid(__pyx_v_capsule, __pyx_k_arrow_array_stream));
  if (__pyx_t_1) {
/* … */
  }
+1432:         return
    goto __pyx_L0;
+1433:     stream = <ArrowArrayStream*>PyCapsule_GetPointer(
  __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_capsule, __pyx_k_arrow_array_stream); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(2, 1433, __pyx_L1_error)
  __pyx_v_stream = ((struct ArrowArrayStream *)__pyx_t_2);
 1434:         capsule, b'arrow_array_stream')
+1435:     if stream == NULL:
  __pyx_t_1 = (__pyx_v_stream == NULL);
  if (__pyx_t_1) {
/* … */
  }
+1436:         return
    goto __pyx_L0;
+1437:     if stream.release != NULL:
  __pyx_t_1 = (__pyx_v_stream->release != NULL);
  if (__pyx_t_1) {
/* … */
  }
+1438:         stream.release(stream)
    __pyx_v_stream->release(__pyx_v_stream);
+1439:     free(stream)
  free(__pyx_v_stream);
 1440: 
 1441: 
+1442: cdef _QueryStreamProducer _new_query_stream_producer(_CursorHandle handle):
static struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_f_7questdb_7_client__new_query_stream_producer(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle) {
  struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod = 0;
  struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._new_query_stream_producer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prod);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1443:     cdef _QueryStreamProducer prod = _QueryStreamProducer()
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__QueryStreamProducer, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1443, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_prod = ((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_t_1);
  __pyx_t_1 = 0;
+1444:     prod.cursor_handle = handle
  __Pyx_INCREF((PyObject *)__pyx_v_handle);
  __Pyx_GIVEREF((PyObject *)__pyx_v_handle);
  __Pyx_GOTREF((PyObject *)__pyx_v_prod->cursor_handle);
  __Pyx_DECREF((PyObject *)__pyx_v_prod->cursor_handle);
  __pyx_v_prod->cursor_handle = __pyx_v_handle;
+1445:     prod.seen_seq = handle._reset_sequence()
  __pyx_t_4 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_reset_sequence(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1445, __pyx_L1_error)
  __pyx_v_prod->seen_seq = __pyx_t_4;
+1446:     return prod
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_prod);
  __pyx_r = __pyx_v_prod;
  goto __pyx_L0;
 1447: 
 1448: 
+1449: cdef object _query_stream_capsule(_QueryStreamProducer prod):
static PyObject *__pyx_f_7questdb_7_client__query_stream_capsule(struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod) {
  struct ArrowArrayStream *__pyx_v_stream;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._query_stream_capsule", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1450:     cdef ArrowArrayStream* stream
+1451:     stream = <ArrowArrayStream*>calloc(1, sizeof(ArrowArrayStream))
  __pyx_v_stream = ((struct ArrowArrayStream *)calloc(1, (sizeof(struct ArrowArrayStream))));
+1452:     if stream == NULL:
  __pyx_t_1 = (__pyx_v_stream == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1453:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(2, 1453, __pyx_L1_error)
+1454:     stream.get_schema = _qs_get_schema
  __pyx_v_stream->get_schema = __pyx_f_7questdb_7_client__qs_get_schema;
+1455:     stream.get_next = _qs_get_next
  __pyx_v_stream->get_next = __pyx_f_7questdb_7_client__qs_get_next;
+1456:     stream.get_last_error = _qs_get_last_error
  __pyx_v_stream->get_last_error = __pyx_f_7questdb_7_client__qs_get_last_error;
+1457:     stream.release = _qs_release
  __pyx_v_stream->release = __pyx_f_7questdb_7_client__qs_release;
+1458:     Py_INCREF(prod)
  Py_INCREF(((PyObject *)__pyx_v_prod));
+1459:     stream.private_data = <void*>prod
  __pyx_v_stream->private_data = ((void *)__pyx_v_prod);
+1460:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L8_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
  }
+1461:         return PyCapsule_New(
      __Pyx_XDECREF(__pyx_r);
/* … */
      __pyx_t_5 = PyCapsule_New(((void *)__pyx_v_stream), __pyx_k_arrow_array_stream, __pyx_f_7questdb_7_client__qs_capsule_destructor); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1461, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_r = __pyx_t_5;
      __pyx_t_5 = 0;
      goto __pyx_L8_try_return;
 1462:             <void*>stream, b'arrow_array_stream', _qs_capsule_destructor)
+1463:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._query_stream_capsule", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 1463, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
+1464:         Py_DECREF(prod)
      Py_DECREF(((PyObject *)__pyx_v_prod));
+1465:         free(stream)
      free(__pyx_v_stream);
+1466:         raise
      __Pyx_GIVEREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0;  __pyx_t_6 = 0;  __pyx_t_7 = 0; 
      __PYX_ERR(2, 1466, __pyx_L6_except_error)
    }
 1467: 
 1468: 
+1469: cdef class _ArrowSchemaBox:
struct __pyx_obj_7questdb_7_client__ArrowSchemaBox {
  PyObject_HEAD
  struct ArrowSchema schema;
  int has_schema;
};

 1470:     """Owns one deep clone of a result's ArrowSchema. Each
 1471:     ``QueryResult.__arrow_c_schema__`` call exports a new clone of it, so
 1472:     the call also works after the stream was handed to a consumer."""
 1473:     cdef ArrowSchema schema
 1474:     cdef bint has_schema
 1475: 
+1476:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_15_ArrowSchemaBox_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_15_ArrowSchemaBox_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_7questdb_7_client_15_ArrowSchemaBox___cinit__(((struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7_client_15_ArrowSchemaBox___cinit__(struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}
+1477:         memset(&self.schema, 0, sizeof(ArrowSchema))
  (void)(memset((&__pyx_v_self->schema), 0, (sizeof(struct ArrowSchema))));
+1478:         self.has_schema = False
  __pyx_v_self->has_schema = 0;
 1479: 
+1480:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_15_ArrowSchemaBox_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_15_ArrowSchemaBox_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_7questdb_7_client_15_ArrowSchemaBox_2__dealloc__(((struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_7questdb_7_client_15_ArrowSchemaBox_2__dealloc__(struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *__pyx_v_self) {
/* … */
  /* function exit code */
}
+1481:         if self.has_schema and self.schema.release != NULL:
  if (__pyx_v_self->has_schema) {
  } else {
    __pyx_t_1 = __pyx_v_self->has_schema;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_self->schema.release != NULL);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+1482:             self.schema.release(&self.schema)
    __pyx_v_self->schema.release((&__pyx_v_self->schema));
+1483:         self.has_schema = False
  __pyx_v_self->has_schema = 0;
 1484: 
 1485: 
+1486: cdef _ArrowSchemaBox _arrow_schema_box(const ArrowSchema* src):
static struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *__pyx_f_7questdb_7_client__arrow_schema_box(struct ArrowSchema const *__pyx_v_src) {
  struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *__pyx_v_box = 0;
  struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._arrow_schema_box", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_box);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1487:     cdef _ArrowSchemaBox box = _ArrowSchemaBox()
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__ArrowSchemaBox, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1487, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_box = ((struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *)__pyx_t_1);
  __pyx_t_1 = 0;
+1488:     if _arrow_schema_deep_clone(src, &box.schema) != 0:
  __pyx_t_4 = (__pyx_f_7questdb_7_client__arrow_schema_deep_clone(__pyx_v_src, (&__pyx_v_box->schema)) != 0);
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+1489:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(2, 1489, __pyx_L1_error)
+1490:     box.has_schema = True
  __pyx_v_box->has_schema = 1;
+1491:     return box
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_box);
  __pyx_r = __pyx_v_box;
  goto __pyx_L0;
 1492: 
 1493: 
+1494: cdef void _arrow_schema_capsule_destructor(object capsule) noexcept:
static void __pyx_f_7questdb_7_client__arrow_schema_capsule_destructor(PyObject *__pyx_v_capsule) {
  struct ArrowSchema *__pyx_v_schema;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("questdb._client._arrow_schema_capsule_destructor", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
}
 1495:     cdef ArrowSchema* schema
+1496:     if not PyCapsule_IsValid(capsule, b'arrow_schema'):
  __pyx_t_1 = (!PyCapsule_IsValid(__pyx_v_capsule, __pyx_k_arrow_schema));
  if (__pyx_t_1) {
/* … */
  }
+1497:         return
    goto __pyx_L0;
+1498:     schema = <ArrowSchema*>PyCapsule_GetPointer(capsule, b'arrow_schema')
  __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_capsule, __pyx_k_arrow_schema); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(2, 1498, __pyx_L1_error)
  __pyx_v_schema = ((struct ArrowSchema *)__pyx_t_2);
+1499:     if schema == NULL:
  __pyx_t_1 = (__pyx_v_schema == NULL);
  if (__pyx_t_1) {
/* … */
  }
+1500:         return
    goto __pyx_L0;
 1501:     # A consumer that imported the schema has moved it and cleared
 1502:     # `release`.
+1503:     if schema.release != NULL:
  __pyx_t_1 = (__pyx_v_schema->release != NULL);
  if (__pyx_t_1) {
/* … */
  }
+1504:         schema.release(schema)
    __pyx_v_schema->release(__pyx_v_schema);
+1505:     free(schema)
  free(__pyx_v_schema);
 1506: 
 1507: 
+1508: cdef object _arrow_schema_capsule(_ArrowSchemaBox box):
static PyObject *__pyx_f_7questdb_7_client__arrow_schema_capsule(struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *__pyx_v_box) {
  struct ArrowSchema *__pyx_v_schema;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._arrow_schema_capsule", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1509:     cdef ArrowSchema* schema = <ArrowSchema*>malloc(sizeof(ArrowSchema))
  __pyx_v_schema = ((struct ArrowSchema *)malloc((sizeof(struct ArrowSchema))));
+1510:     if schema == NULL:
  __pyx_t_1 = (__pyx_v_schema == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1511:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(2, 1511, __pyx_L1_error)
 1512:     # On failure, the clone releases what it allocated.
+1513:     if _arrow_schema_deep_clone(&box.schema, schema) != 0:
  __pyx_t_1 = (__pyx_f_7questdb_7_client__arrow_schema_deep_clone((&__pyx_v_box->schema), __pyx_v_schema) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1514:         free(schema)
    free(__pyx_v_schema);
+1515:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(2, 1515, __pyx_L1_error)
+1516:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __pyx_L7_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L9_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
  }
+1517:         return PyCapsule_New(
      __Pyx_XDECREF(__pyx_r);
/* … */
      __pyx_t_5 = PyCapsule_New(((void *)__pyx_v_schema), __pyx_k_arrow_schema, __pyx_f_7questdb_7_client__arrow_schema_capsule_destructor); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1517, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_r = __pyx_t_5;
      __pyx_t_5 = 0;
      goto __pyx_L9_try_return;
 1518:             <void*>schema, b'arrow_schema', _arrow_schema_capsule_destructor)
+1519:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._arrow_schema_capsule", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(2, 1519, __pyx_L7_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
+1520:         schema.release(schema)
      __pyx_v_schema->release(__pyx_v_schema);
+1521:         free(schema)
      free(__pyx_v_schema);
+1522:         raise
      __Pyx_GIVEREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0;  __pyx_t_6 = 0;  __pyx_t_7 = 0; 
      __PYX_ERR(2, 1522, __pyx_L7_except_error)
    }
 1523: 
 1524: 
+1525: _NUMPY_NULLABLE_CACHE = None
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_NUMPY_NULLABLE_CACHE, Py_None) < (0)) __PYX_ERR(2, 1525, __pyx_L1_error)
 1526: 
 1527: 
+1528: cdef object _numpy_nullable_mapping():
static PyObject *__pyx_f_7questdb_7_client__numpy_nullable_mapping(void) {
  PyObject *__pyx_v_pa = NULL;
  PyObject *__pyx_v_pd = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._numpy_nullable_mapping", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pa);
  __Pyx_XDECREF(__pyx_v_pd);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1529:     """Return a ``types_mapper`` callable that maps Arrow primitives to
 1530:     pandas nullable-extension dtypes (Int64Dtype, Float64Dtype, etc.).
 1531: 
 1532:     Mirrors ``pandas.io._util._arrow_dtype_mapping``'s coverage so that
 1533:     ``to_pandas(dtype_backend="numpy_nullable")`` here matches what
 1534:     ``pd.read_parquet(..., dtype_backend="numpy_nullable")`` produces.
 1535:     Non-primitive Arrow types fall through (mapper returns None) and
 1536:     pyarrow.Table.to_pandas applies its default conversion.
 1537:     """
 1538:     global _NUMPY_NULLABLE_CACHE
+1539:     if _NUMPY_NULLABLE_CACHE is None:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_NUMPY_NULLABLE_CACHE); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+1540:         import pyarrow as pa
    __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pyarrow, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1540, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_3;
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_pa = __pyx_t_1;
    __pyx_t_1 = 0;
+1541:         import pandas as pd
    __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pandas_2, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1541, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_3;
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_pd = __pyx_t_1;
    __pyx_t_1 = 0;
 1542:         _NUMPY_NULLABLE_CACHE = {
+1543:             pa.int8(): pd.Int8Dtype(),
    __pyx_t_1 = __Pyx_PyDict_NewPresized(13); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int8, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1543, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_Int8Dtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1543, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_4, __pyx_t_5) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1544:             pa.int16(): pd.Int16Dtype(),
    __pyx_t_4 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int16, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_Int16Dtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_5, __pyx_t_4) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1545:             pa.int32(): pd.Int32Dtype(),
    __pyx_t_5 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int32, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1545, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_Int32Dtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1545, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_4, __pyx_t_5) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1546:             pa.int64(): pd.Int64Dtype(),
    __pyx_t_4 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int64, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1546, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_Int64Dtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1546, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_5, __pyx_t_4) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1547:             pa.uint8(): pd.UInt8Dtype(),
    __pyx_t_5 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_uint8, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1547, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_UInt8Dtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1547, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_4, __pyx_t_5) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1548:             pa.uint16(): pd.UInt16Dtype(),
    __pyx_t_4 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_uint16, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1548, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_UInt16Dtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1548, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_5, __pyx_t_4) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1549:             pa.uint32(): pd.UInt32Dtype(),
    __pyx_t_5 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_uint32, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1549, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_UInt32Dtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1549, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_4, __pyx_t_5) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1550:             pa.uint64(): pd.UInt64Dtype(),
    __pyx_t_4 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_uint64, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1550, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_UInt64Dtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1550, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_5, __pyx_t_4) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1551:             pa.float32(): pd.Float32Dtype(),
    __pyx_t_5 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_float32, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1551, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_Float32Dtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1551, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_4, __pyx_t_5) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1552:             pa.float64(): pd.Float64Dtype(),
    __pyx_t_4 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_float64, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1552, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_Float64Dtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1552, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_5, __pyx_t_4) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1553:             pa.bool_(): pd.BooleanDtype(),
    __pyx_t_5 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_bool_2, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1553, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_BooleanDtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1553, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_4, __pyx_t_5) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1554:             pa.string(): pd.StringDtype(),
    __pyx_t_4 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_string, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1554, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_StringDtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1554, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_5, __pyx_t_4) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1555:             pa.large_string(): pd.StringDtype(),
    __pyx_t_5 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_large_string, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1555, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_7 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_StringDtype, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1555, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    if (PyDict_SetItem(__pyx_t_1, __pyx_t_4, __pyx_t_5) < (0)) __PYX_ERR(2, 1543, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1556:         }.get
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_NUMPY_NULLABLE_CACHE, __pyx_t_5) < (0)) __PYX_ERR(2, 1542, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1557:     return _NUMPY_NULLABLE_CACHE
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_NUMPY_NULLABLE_CACHE); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 1558: 
 1559: 
+1560: cdef object _table_shared_symbol_dict(object table):
static PyObject *__pyx_f_7questdb_7_client__table_shared_symbol_dict(PyObject *__pyx_v_table) {
  PyObject *__pyx_v_pa = NULL;
  PyObject *__pyx_v_schema = 0;
  int __pyx_v_changed;
  PyObject *__pyx_v_cols = 0;
  PyObject *__pyx_v_fields = 0;
  PyObject *__pyx_v_field = 0;
  PyObject *__pyx_v_ty = 0;
  PyObject *__pyx_v_col = 0;
  PyObject *__pyx_v_shared = 0;
  PyObject *__pyx_v_signed_ty = 0;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  Py_ssize_t __pyx_8genexpr4__pyx_v_j;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_AddTraceback("questdb._client._table_shared_symbol_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pa);
  __Pyx_XDECREF(__pyx_v_schema);
  __Pyx_XDECREF(__pyx_v_cols);
  __Pyx_XDECREF(__pyx_v_fields);
  __Pyx_XDECREF(__pyx_v_field);
  __Pyx_XDECREF(__pyx_v_ty);
  __Pyx_XDECREF(__pyx_v_col);
  __Pyx_XDECREF(__pyx_v_shared);
  __Pyx_XDECREF(__pyx_v_signed_ty);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1561:     """Collapse every dictionary (SYMBOL) column so all chunks share ONE
 1562:     dictionary, and recast its index to signed int32.
 1563: 
 1564:     QuestDB SYMBOL egresses as ``dictionary(uint32, utf8)``, one chunk per wire
 1565:     batch, each carrying the full append-only connection dict with global,
 1566:     query-stable codes — so the last chunk's dictionary is the largest and
 1567:     covers every code (same invariant as ``_polars_dict_codes_cats``). A generic
 1568:     consumer (``Table.to_pandas`` / a foreign Arrow reader) otherwise re-unifies
 1569:     the per-batch dictionaries — ``O(batches × cardinality)``, which dominates
 1570:     high-cardinality SYMBOL egress. Re-pointing every chunk at that one shared
 1571:     dictionary makes the unify a no-op (codes are already valid against the
 1572:     superset). The index is also recast to int32 because pandas rejects unsigned
 1573:     dictionary indices (symbol cardinality fits int32). Returns the table
 1574:     unchanged when no column is a dictionary.
 1575:     """
+1576:     import pyarrow as pa
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pyarrow, 0, 0, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1576, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_pa = __pyx_t_1;
  __pyx_t_1 = 0;
+1577:     cdef object schema = table.schema
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1577, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_schema = __pyx_t_1;
  __pyx_t_1 = 0;
+1578:     cdef bint changed = False
  __pyx_v_changed = 0;
+1579:     cdef list cols = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_cols = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+1580:     cdef list fields = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_fields = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 1581:     cdef object field, ty, col, shared, signed_ty
 1582:     cdef Py_ssize_t i, j, n
+1583:     for i in range(table.num_columns):
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_num_columns); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 1583, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;
+1584:         field = schema.field(i)
    __pyx_t_6 = __pyx_v_schema;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_7 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1584, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_field, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1584, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_1);
    __pyx_t_1 = 0;
+1585:         ty = field.type
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1585, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_ty, __pyx_t_1);
    __pyx_t_1 = 0;
+1586:         if not pa.types.is_dictionary(ty):
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1586, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __pyx_t_6;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_ty};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_dictionary, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1586, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(2, 1586, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10 = (!__pyx_t_9);
    if (__pyx_t_10) {
/* … */
    }
+1587:             cols.append(table.column(i))
      __pyx_t_6 = __pyx_v_table;
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1587, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_column_2, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1587, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_cols, __pyx_t_1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 1587, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1588:             fields.append(field)
      __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_fields, __pyx_v_field); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 1588, __pyx_L1_error)
+1589:             continue
      goto __pyx_L3_continue;
+1590:         changed = True
    __pyx_v_changed = 1;
+1591:         col = table.column(i)
    __pyx_t_7 = __pyx_v_table;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_column_2, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1591, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_col, __pyx_t_1);
    __pyx_t_1 = 0;
+1592:         signed_ty = pa.dictionary(pa.int32(), ty.value_type, ty.ordered)
    __pyx_t_6 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_12 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_12);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_12, NULL};
      __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int32, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1592, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_value_type); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1592, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_ty, __pyx_mstate_global->__pyx_n_u_ordered); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 1592, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[4] = {__pyx_t_6, __pyx_t_7, __pyx_t_12, __pyx_t_13};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dictionary, __pyx_callargs+__pyx_t_8, (4-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1592, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_signed_ty, __pyx_t_1);
    __pyx_t_1 = 0;
+1593:         n = col.num_chunks
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_num_chunks); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1593, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_14 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_14 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 1593, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_n = __pyx_t_14;
+1594:         if n == 0:
    __pyx_t_10 = (__pyx_v_n == 0);
    if (__pyx_t_10) {
/* … */
      goto __pyx_L6;
    }
+1595:             cols.append(col.cast(signed_ty))
      __pyx_t_13 = __pyx_v_col;
      __Pyx_INCREF(__pyx_t_13);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_v_signed_ty};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_cast, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1595, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_cols, __pyx_t_1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 1595, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1596:         else:
 1597:             # Append-only => the last chunk's dict is the superset; rebase every
 1598:             # chunk's (int32-recast) codes onto it so they share one dictionary.
+1599:             shared = col.chunk(n - 1).dictionary
    /*else*/ {
      __pyx_t_13 = __pyx_v_col;
      __Pyx_INCREF(__pyx_t_13);
      __pyx_t_12 = PyLong_FromSsize_t((__pyx_v_n - 1)); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1599, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_12};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_chunk, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1599, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_dictionary); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1599, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF_SET(__pyx_v_shared, __pyx_t_12);
      __pyx_t_12 = 0;
+1600:             cols.append(pa.chunked_array(
      __pyx_t_1 = __pyx_v_pa;
      __Pyx_INCREF(__pyx_t_1);
      { /* enter inner scope */
/* … */
      __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_cols, __pyx_t_12); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 1600, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    }
    __pyx_L6:;
+1601:                 [pa.DictionaryArray.from_arrays(
        __pyx_t_13 = PyList_New(0); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 1601, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
/* … */
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_DictionaryArray); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1601, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_6 = __pyx_t_17;
          __Pyx_INCREF(__pyx_t_6);
+1602:                     col.chunk(j).indices.cast(pa.int32()), shared)
          __pyx_t_21 = __pyx_v_col;
          __Pyx_INCREF(__pyx_t_21);
          __pyx_t_22 = PyLong_FromSsize_t(__pyx_8genexpr4__pyx_v_j); if (unlikely(!__pyx_t_22)) __PYX_ERR(2, 1602, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_22);
          __pyx_t_8 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_21, __pyx_t_22};
            __pyx_t_20 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_chunk, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 1602, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_20);
          }
          __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_indices); if (unlikely(!__pyx_t_22)) __PYX_ERR(2, 1602, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_22);
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
          __pyx_t_19 = __pyx_t_22;
          __Pyx_INCREF(__pyx_t_19);
          __pyx_t_21 = __pyx_v_pa;
          __Pyx_INCREF(__pyx_t_21);
          __pyx_t_8 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_21, NULL};
            __pyx_t_20 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_int32, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
            if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 1602, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_20);
          }
          __pyx_t_8 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_19, __pyx_t_20};
            __pyx_t_18 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_cast, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
            __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 1602, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_18);
          }
          __pyx_t_8 = 0;
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_18, __pyx_v_shared};
            __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrays, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
            if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1601, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
          }
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_13, (PyObject*)__pyx_t_7))) __PYX_ERR(2, 1601, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
      } /* exit inner scope */
+1603:                  for j in range(n)],
        __pyx_t_14 = __pyx_v_n;
        __pyx_t_15 = __pyx_t_14;
        for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
          __pyx_8genexpr4__pyx_v_j = __pyx_t_16;
+1604:                 type=signed_ty))
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_13};
        __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1600, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_type, __pyx_v_signed_ty, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1600, __pyx_L1_error)
        __pyx_t_12 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_chunked_array, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1600, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
      }
+1605:         fields.append(field.with_type(signed_ty))
    __pyx_t_7 = __pyx_v_field;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_signed_ty};
      __pyx_t_12 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_with_type, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1605, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
    }
    __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_fields, __pyx_t_12); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 1605, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_L3_continue:;
  }
+1606:     if not changed:
  __pyx_t_10 = (!__pyx_v_changed);
  if (__pyx_t_10) {
/* … */
  }
+1607:         return table
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_table);
    __pyx_r = __pyx_v_table;
    goto __pyx_L0;
+1608:     return pa.Table.from_arrays(
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 1608, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_7 = __pyx_t_13;
  __Pyx_INCREF(__pyx_t_7);
+1609:         cols, schema=pa.schema(fields, metadata=schema.metadata))
  __pyx_t_17 = __pyx_v_pa;
  __Pyx_INCREF(__pyx_t_17);
  __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_v_schema, __pyx_mstate_global->__pyx_n_u_metadata); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 1609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_17, __pyx_v_fields};
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1609, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_metadata, __pyx_t_18, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1609, __pyx_L1_error)
    __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_schema, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1609, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_v_cols};
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_schema, __pyx_t_1, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1608, __pyx_L1_error)
    __pyx_t_12 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrays, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1608, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
  }
  __pyx_r = __pyx_t_12;
  __pyx_t_12 = 0;
  goto __pyx_L0;
 1610: 
 1611: 
 1612: cdef dict _KIND_NAMES = {
+1613:     <int>qwp_reader_column_kind_boolean: 'boolean',
  __pyx_t_18 = __Pyx_PyDict_NewPresized(23); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_boolean)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_boolean) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1614:     <int>qwp_reader_column_kind_byte: 'byte',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_byte)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_byte) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1615:     <int>qwp_reader_column_kind_short: 'short',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_short)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_short) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1616:     <int>qwp_reader_column_kind_int: 'int',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_int)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1617:     <int>qwp_reader_column_kind_long: 'long',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_long)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_long) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1618:     <int>qwp_reader_column_kind_float: 'float',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_float)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1618, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_float) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1619:     <int>qwp_reader_column_kind_double: 'double',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_double)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_double) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1620:     <int>qwp_reader_column_kind_char: 'char',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_char)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_char_2) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1621:     <int>qwp_reader_column_kind_ipv4: 'ipv4',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_ipv4)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1621, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_ipv4) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1622:     <int>qwp_reader_column_kind_timestamp: 'timestamp',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_timestamp)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1622, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_timestamp) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1623:     <int>qwp_reader_column_kind_timestamp_nanos: 'timestamp_ns',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_timestamp_nanos)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_timestamp_ns) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1624:     <int>qwp_reader_column_kind_date: 'date',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_date)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_date) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1625:     <int>qwp_reader_column_kind_uuid: 'uuid',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_uuid)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_uuid) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1626:     <int>qwp_reader_column_kind_long256: 'long256',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_long256)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_long256) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1627:     <int>qwp_reader_column_kind_geohash: 'geohash',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_geohash)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_geohash_2) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1628:     <int>qwp_reader_column_kind_varchar: 'varchar',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_varchar)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_varchar) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1629:     <int>qwp_reader_column_kind_binary: 'binary',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_binary)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_binary) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1630:     <int>qwp_reader_column_kind_symbol: 'symbol',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_symbol)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_symbol) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1631:     <int>qwp_reader_column_kind_double_array: 'double_array',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_double_array)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_double_array) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1632:     <int>qwp_reader_column_kind_long_array: 'long_array',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_long_array)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_long_array) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1633:     <int>qwp_reader_column_kind_decimal64: 'decimal',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_decimal64)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1633, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_decimal) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1634:     <int>qwp_reader_column_kind_decimal128: 'decimal',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_decimal128)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_decimal) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+1635:     <int>qwp_reader_column_kind_decimal256: 'decimal',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_decimal256)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 1635, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_decimal) < (0)) __PYX_ERR(2, 1613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__KIND_NAMES);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__KIND_NAMES, ((PyObject*)__pyx_t_18));
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
 1636: }
 1637: 
 1638: 
+1639: cdef int _reader_check(bint ok, questdb_error** err, str what) except -1:
static int __pyx_f_7questdb_7_client__reader_check(int __pyx_v_ok, questdb_error **__pyx_v_err, PyObject *__pyx_v_what) {
  questdb_error *__pyx_v_taken;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._reader_check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1640:     # By address, not value: reading `err` in the same argument list as the
 1641:     # FFI call that writes it is indeterminately sequenced (C11 6.5.2.2p10).
+1642:     if ok:
  if (__pyx_v_ok) {
/* … */
  }
+1643:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+1644:     if err[0] != NULL:
  __pyx_t_1 = ((__pyx_v_err[0]) != NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1645:         taken = err[0]
    __pyx_v_taken = (__pyx_v_err[0]);
+1646:         err[0] = NULL
    (__pyx_v_err[0]) = NULL;
+1647:         raise _reader_err_to_py(taken)
    __pyx_t_2 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_v_taken); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 1647, __pyx_L1_error)
+1648:     raise QuestDBError(
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
+1649:         QuestDBErrorCode.ServerFlushError,
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1649, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1649, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1650:         what + ' returned false without err_out')
  __pyx_t_5 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_what, __pyx_mstate_global->__pyx_kp_u_returned_false_without_err_out); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_5};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1648, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __Pyx_Raise(__pyx_t_2, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __PYX_ERR(2, 1648, __pyx_L1_error)
 1651: 
 1652: 
+1653: cdef object _numpy_dtype_for_kind(qwp_reader_column_kind kind, object np):
static PyObject *__pyx_f_7questdb_7_client__numpy_dtype_for_kind(enum qwp_reader_column_kind __pyx_v_kind, PyObject *__pyx_v_np) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._numpy_dtype_for_kind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1654:     if kind == qwp_reader_column_kind_boolean:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_boolean);
  if (__pyx_t_1) {
/* … */
  }
+1655:         return np.dtype(np.bool_)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_bool_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1655, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1655, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1656:     if kind == qwp_reader_column_kind_byte:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_byte);
  if (__pyx_t_1) {
/* … */
  }
+1657:         return np.dtype(np.int8)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_int8); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1657, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1657, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1658:     if kind == qwp_reader_column_kind_short:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_short);
  if (__pyx_t_1) {
/* … */
  }
+1659:         return np.dtype(np.int16)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_int16); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1659, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1659, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1660:     if kind == qwp_reader_column_kind_int:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_int);
  if (__pyx_t_1) {
/* … */
  }
+1661:         return np.dtype(np.int32)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1661, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1661, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1662:     if kind == qwp_reader_column_kind_long:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_long);
  if (__pyx_t_1) {
/* … */
  }
+1663:         return np.dtype(np.int64)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1663, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1663, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1664:     if kind == qwp_reader_column_kind_float:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_float);
  if (__pyx_t_1) {
/* … */
  }
+1665:         return np.dtype(np.float32)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_float32); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1665, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1665, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1666:     if kind == qwp_reader_column_kind_double:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_double);
  if (__pyx_t_1) {
/* … */
  }
+1667:         return np.dtype(np.float64)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1667, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1667, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1668:     if kind == qwp_reader_column_kind_char:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_char);
  if (__pyx_t_1) {
/* … */
  }
+1669:         return np.dtype(np.uint16)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_uint16); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1669, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1669, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1670:     if kind == qwp_reader_column_kind_ipv4:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_ipv4);
  if (__pyx_t_1) {
/* … */
  }
+1671:         return np.dtype(np.uint32)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_uint32); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1671, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1671, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1672:     if kind == qwp_reader_column_kind_timestamp:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_timestamp);
  if (__pyx_t_1) {
/* … */
  }
+1673:         return np.dtype('datetime64[us]')
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_datetime64_us};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1673, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1674:     if kind == qwp_reader_column_kind_timestamp_nanos:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_timestamp_nanos);
  if (__pyx_t_1) {
/* … */
  }
+1675:         return np.dtype('datetime64[ns]')
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_datetime64_ns};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1676:     if kind == qwp_reader_column_kind_date:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_date);
  if (__pyx_t_1) {
/* … */
  }
+1677:         return np.dtype('datetime64[ms]')
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_datetime64_ms};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1677, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+1678:     return None
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
 1679: 
 1680: 
+1681: cdef object _numpy_fixed_chunk(
static PyObject *__pyx_f_7questdb_7_client__numpy_fixed_chunk(struct qwp_reader_batch const *__pyx_v_batch, size_t __pyx_v_col_idx, enum qwp_reader_column_kind __pyx_v_kind, size_t __pyx_v_row_count, PyObject *__pyx_v_np) {
  struct qwp_reader_column_data __pyx_v_cd;
  questdb_error *__pyx_v_err;
  PyObject *__pyx_v_dtype = 0;
  size_t __pyx_v_itemsize;
  CYTHON_UNUSED Py_ssize_t __pyx_v_nbytes;
  unsigned char *__pyx_v_src;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF((PyObject *)__pyx_t_13);
  __Pyx_AddTraceback("questdb._client._numpy_fixed_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1682:         const qwp_reader_batch* batch,
 1683:         size_t col_idx,
 1684:         qwp_reader_column_kind kind,
 1685:         size_t row_count,
 1686:         object np):
 1687:     cdef qwp_reader_column_data cd
+1688:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
+1689:     cdef object dtype = _numpy_dtype_for_kind(kind, np)
  __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_dtype_for_kind(__pyx_v_kind, __pyx_v_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1689, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_dtype = __pyx_t_1;
  __pyx_t_1 = 0;
 1690:     cdef size_t itemsize
 1691:     cdef Py_ssize_t nbytes
 1692:     cdef unsigned char* src
+1693:     if dtype is None:
  __pyx_t_2 = (__pyx_v_dtype == Py_None);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+1694:         raise QuestDBError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1694, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+1695:             QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1695, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1695, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1696:             'numpy egress does not support column kind 0x{:02X} yet'.format(
    __pyx_t_7 = __pyx_mstate_global->__pyx_kp_u_numpy_egress_does_not_support_co;
    __Pyx_INCREF(__pyx_t_7);
+1697:                 <int>kind))
    __pyx_t_8 = __Pyx_PyLong_From_int(((int)__pyx_v_kind)); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1697, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1696, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1694, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 1694, __pyx_L1_error)
+1698:     _reader_check(
  __pyx_t_10 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_cd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_data); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(2, 1698, __pyx_L1_error)
 1699:         qwp_reader_batch_column_data(batch, col_idx, &cd, &err), &err,
 1700:         'qwp_reader_batch_column_data')
+1701:     itemsize = dtype.itemsize
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1701, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = __Pyx_PyLong_As_size_t(__pyx_t_1); if (unlikely((__pyx_t_9 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 1701, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_itemsize = __pyx_t_9;
+1702:     if cd.value_stride != itemsize:
  __pyx_t_2 = (__pyx_v_cd.value_stride != __pyx_v_itemsize);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+1703:         raise QuestDBError(
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+1704:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1704, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1704, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1705:             'column kind 0x{:02X} wire stride {} != numpy itemsize {}'.format(
    __pyx_t_8 = __pyx_mstate_global->__pyx_kp_u_column_kind_0x_02X_wire_stride_n;
    __Pyx_INCREF(__pyx_t_8);
+1706:                 <int>kind, cd.value_stride, itemsize))
    __pyx_t_7 = __Pyx_PyLong_From_int(((int)__pyx_v_kind)); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_11 = __Pyx_PyLong_FromSize_t(__pyx_v_cd.value_stride); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 1706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = __Pyx_PyLong_FromSize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_7, __pyx_t_11, __pyx_t_12};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1705, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_6};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1703, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 1703, __pyx_L1_error)
+1707:     if row_count == 0:
  __pyx_t_2 = (__pyx_v_row_count == 0);
  if (__pyx_t_2) {
/* … */
  }
+1708:         return np.empty(0, dtype=dtype)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_5 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_5, __pyx_mstate_global->__pyx_int_0};
      __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1708, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_v_dtype, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1708, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_empty, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1708, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+1709:     if cd.values == NULL:
  __pyx_t_2 = (__pyx_v_cd.values == NULL);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+1710:         raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1710, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+1711:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1711, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1711, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1712:             'column kind 0x{:02X} has {} rows but no values buffer'.format(
    __pyx_t_12 = __pyx_mstate_global->__pyx_kp_u_column_kind_0x_02X_has_rows_but;
    __Pyx_INCREF(__pyx_t_12);
+1713:                 <int>kind, row_count))
    __pyx_t_11 = __Pyx_PyLong_From_int(((int)__pyx_v_kind)); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 1713, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_7 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1713, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_11, __pyx_t_7};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1712, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_4, __pyx_t_3};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1710, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 1710, __pyx_L1_error)
+1714:     nbytes = <Py_ssize_t>(row_count * cd.value_stride)
  __pyx_v_nbytes = ((Py_ssize_t)(__pyx_v_row_count * __pyx_v_cd.value_stride));
+1715:     src = <unsigned char*>cd.values
  __pyx_v_src = ((unsigned char *)__pyx_v_cd.values);
+1716:     if kind == qwp_reader_column_kind_boolean:
  __pyx_t_2 = (__pyx_v_kind == qwp_reader_column_kind_boolean);
  if (__pyx_t_2) {
/* … */
  }
+1717:         return np.frombuffer((<unsigned char[:nbytes]>src), dtype=np.uint8) != 0
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_5 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_5);
    if (!__pyx_v_src) {
      PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");
      __PYX_ERR(2, 1717, __pyx_L1_error)
    }
    __pyx_t_4 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_unsigned_char); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1717, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = Py_BuildValue("("  __PYX_BUILD_PY_SSIZE_T  ")", ((Py_ssize_t)__pyx_v_nbytes)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1717, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #if CYTHON_COMPILING_IN_LIMITED_API
    __pyx_t_14 = PyBytes_AsString(__pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 1717, __pyx_L1_error)
    #else
    __pyx_t_14 = PyBytes_AS_STRING(__pyx_t_4);
    #endif
    __pyx_t_13 = __pyx_array_new(__pyx_t_3, sizeof(unsigned char), __pyx_t_14, "c", (char *) __pyx_v_src); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 1717, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_13);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_uint8); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1717, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_5, ((PyObject *)__pyx_t_13)};
      __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1717, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_4, __pyx_t_3, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1717, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_frombuffer, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF((PyObject *)__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1717, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_3 = __Pyx_PyLong_NeObjC(__pyx_t_1, __pyx_mstate_global->__pyx_int_0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1717, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+1718:     return np.frombuffer((<unsigned char[:nbytes]>src), dtype=dtype).copy()
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __pyx_v_np;
  __Pyx_INCREF(__pyx_t_5);
  if (!__pyx_v_src) {
    PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");
    __PYX_ERR(2, 1718, __pyx_L1_error)
  }
  __pyx_t_7 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_unsigned_char); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = Py_BuildValue("("  __PYX_BUILD_PY_SSIZE_T  ")", ((Py_ssize_t)__pyx_v_nbytes)); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  #if CYTHON_COMPILING_IN_LIMITED_API
  __pyx_t_14 = PyBytes_AsString(__pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 1718, __pyx_L1_error)
  #else
  __pyx_t_14 = PyBytes_AS_STRING(__pyx_t_7);
  #endif
  __pyx_t_13 = __pyx_array_new(__pyx_t_6, sizeof(unsigned char), __pyx_t_14, "c", (char *) __pyx_v_src); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 1718, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_13);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_9 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_5, ((PyObject *)__pyx_t_13)};
    __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_v_dtype, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1718, __pyx_L1_error)
    __pyx_t_4 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_frombuffer, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF((PyObject *)__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_1 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_9 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 1719: 
 1720: 
+1721: cdef inline void_int _obj_chunk_set(
static CYTHON_INLINE __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__obj_chunk_set(PyArrayObject *__pyx_v_out, size_t __pyx_v_r, PyObject *__pyx_v_v) {
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._obj_chunk_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}
 1722:         cnp.ndarray out, size_t r, object v) except -1:
 1723:     # np.empty(dtype=object) initialises every slot to None, so null rows are
 1724:     # left untouched and a mid-loop raise leaves the array safe to release.
+1725:     cnp.PyArray_SETITEM(out, cnp.PyArray_GETPTR1(out, <cnp.npy_intp>r), v)
  __pyx_t_1 = PyArray_SETITEM(__pyx_v_out, PyArray_GETPTR1(__pyx_v_out, ((npy_intp)__pyx_v_r)), __pyx_v_v); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 1725, __pyx_L1_error)
 1726: 
 1727: 
+1728: cdef object _numpy_varlen_chunk(
static PyObject *__pyx_f_7questdb_7_client__numpy_varlen_chunk(struct qwp_reader_batch const *__pyx_v_batch, size_t __pyx_v_col_idx, enum qwp_reader_column_kind __pyx_v_kind, size_t __pyx_v_row_count, PyObject *__pyx_v_np) {
  struct qwp_reader_column_data __pyx_v_cd;
  questdb_error *__pyx_v_err;
  uint32_t const *__pyx_v_offsets;
  uint8_t const *__pyx_v_data;
  uint8_t const *__pyx_v_validity;
  size_t __pyx_v_r;
  uint32_t __pyx_v_start;
  uint32_t __pyx_v_end;
  PyArrayObject *__pyx_v_out = 0;
  int __pyx_v_is_binary;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("questdb._client._numpy_varlen_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1729:         const qwp_reader_batch* batch,
 1730:         size_t col_idx,
 1731:         qwp_reader_column_kind kind,
 1732:         size_t row_count,
 1733:         object np):
 1734:     cdef qwp_reader_column_data cd
+1735:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 1736:     cdef const uint32_t* offsets
 1737:     cdef const uint8_t* data
 1738:     cdef const uint8_t* validity
 1739:     cdef size_t r
 1740:     cdef uint32_t start
 1741:     cdef uint32_t end
 1742:     cdef cnp.ndarray out
+1743:     cdef bint is_binary = kind == qwp_reader_column_kind_binary
  __pyx_v_is_binary = (__pyx_v_kind == qwp_reader_column_kind_binary);
+1744:     _reader_check(
  __pyx_t_1 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_cd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_data); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 1744, __pyx_L1_error)
 1745:         qwp_reader_batch_column_data(batch, col_idx, &cd, &err), &err,
 1746:         'qwp_reader_batch_column_data')
+1747:     out = np.empty(row_count, dtype=object)
  __pyx_t_3 = __pyx_v_np;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1747, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_4};
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1747, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_builtin_object, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1747, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_empty, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1747, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(2, 1747, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+1748:     if row_count == 0:
  __pyx_t_7 = (__pyx_v_row_count == 0);
  if (__pyx_t_7) {
/* … */
  }
+1749:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = ((PyObject *)__pyx_v_out);
    goto __pyx_L0;
+1750:     if cd.var_offsets == NULL:
  __pyx_t_7 = (__pyx_v_cd.var_offsets == NULL);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+1751:         raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1751, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+1752:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1752, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1752, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1753:             'column kind 0x{:02X} has {} rows but no offset table'.format(
    __pyx_t_9 = __pyx_mstate_global->__pyx_kp_u_column_kind_0x_02X_has_rows_but_2;
    __Pyx_INCREF(__pyx_t_9);
+1754:                 <int>kind, row_count))
    __pyx_t_10 = __Pyx_PyLong_From_int(((int)__pyx_v_kind)); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 1754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 1754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_10, __pyx_t_11};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1753, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1751, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 1751, __pyx_L1_error)
+1755:     offsets = cd.var_offsets
  __pyx_t_12 = __pyx_v_cd.var_offsets;
  __pyx_v_offsets = __pyx_t_12;
+1756:     data = cd.var_data
  __pyx_t_13 = __pyx_v_cd.var_data;
  __pyx_v_data = __pyx_t_13;
+1757:     if data == NULL and cd.var_data_len > 0:
  __pyx_t_14 = (__pyx_v_data == NULL);
  if (__pyx_t_14) {
  } else {
    __pyx_t_7 = __pyx_t_14;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_14 = (__pyx_v_cd.var_data_len > 0);
  __pyx_t_7 = __pyx_t_14;
  __pyx_L6_bool_binop_done:;
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+1758:         raise QuestDBError(
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1758, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+1759:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+1760:             'column kind 0x{:02X} has {} rows but no data buffer'.format(
    __pyx_t_11 = __pyx_mstate_global->__pyx_kp_u_column_kind_0x_02X_has_rows_but_3;
    __Pyx_INCREF(__pyx_t_11);
+1761:                 <int>kind, row_count))
    __pyx_t_10 = __Pyx_PyLong_From_int(((int)__pyx_v_kind)); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 1761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 1761, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_10, __pyx_t_9};
      __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
    }
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_6, __pyx_t_8};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 1758, __pyx_L1_error)
+1762:     validity = cd.validity
  __pyx_t_15 = __pyx_v_cd.validity;
  __pyx_v_validity = __pyx_t_15;
+1763:     for r in range(row_count):
  __pyx_t_5 = __pyx_v_row_count;
  __pyx_t_16 = __pyx_t_5;
  for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
    __pyx_v_r = __pyx_t_17;
+1764:         if validity != NULL and ((validity[r >> 3] >> (r & 7)) & 1):
    __pyx_t_14 = (__pyx_v_validity != NULL);
    if (__pyx_t_14) {
    } else {
      __pyx_t_7 = __pyx_t_14;
      goto __pyx_L11_bool_binop_done;
    }
    __pyx_t_14 = ((((__pyx_v_validity[(__pyx_v_r >> 3)]) >> (__pyx_v_r & 7)) & 1) != 0);
    __pyx_t_7 = __pyx_t_14;
    __pyx_L11_bool_binop_done:;
    if (__pyx_t_7) {
/* … */
    }
+1765:             continue
      goto __pyx_L8_continue;
+1766:         start = offsets[r]
    __pyx_v_start = (__pyx_v_offsets[__pyx_v_r]);
+1767:         end = offsets[r + 1]
    __pyx_v_end = (__pyx_v_offsets[(__pyx_v_r + 1)]);
+1768:         if end < start or end > cd.var_data_len:
    __pyx_t_14 = (__pyx_v_end < __pyx_v_start);
    if (!__pyx_t_14) {
    } else {
      __pyx_t_7 = __pyx_t_14;
      goto __pyx_L14_bool_binop_done;
    }
    __pyx_t_14 = (__pyx_v_end > __pyx_v_cd.var_data_len);
    __pyx_t_7 = __pyx_t_14;
    __pyx_L14_bool_binop_done:;
    if (unlikely(__pyx_t_7)) {
/* … */
    }
+1769:             raise QuestDBError(
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
+1770:                 QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+1771:                 'corrupt varlen offsets in column kind 0x{:02X}'.format(
      __pyx_t_9 = __pyx_mstate_global->__pyx_kp_u_corrupt_varlen_offsets_in_column;
      __Pyx_INCREF(__pyx_t_9);
+1772:                     <int>kind))
      __pyx_t_10 = __Pyx_PyLong_From_int(((int)__pyx_v_kind)); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_18 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_10};
        __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_18, (2-__pyx_t_18) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1771, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_18 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
        __pyx_t_18 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_t_6};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_18, (3-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1769, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(2, 1769, __pyx_L1_error)
+1773:         if end > start:
    __pyx_t_7 = (__pyx_v_end > __pyx_v_start);
    if (__pyx_t_7) {
/* … */
      goto __pyx_L16;
    }
+1774:             if is_binary:
      if (__pyx_v_is_binary) {
/* … */
        goto __pyx_L17;
      }
+1775:                 _obj_chunk_set(out, r, PyBytes_FromStringAndSize(
        __pyx_t_2 = PyBytes_FromStringAndSize(((char const *)(__pyx_v_data + __pyx_v_start)), ((Py_ssize_t)(__pyx_v_end - __pyx_v_start))); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1775, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_19 = __pyx_f_7questdb_7_client__obj_chunk_set(__pyx_v_out, __pyx_v_r, __pyx_t_2); if (unlikely(__pyx_t_19 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 1775, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 1776:                     <const char*>(data + start), <Py_ssize_t>(end - start)))
 1777:             else:
+1778:                 _obj_chunk_set(out, r, PyUnicode_FromStringAndSize(
      /*else*/ {
/* … */
        __pyx_t_2 = PyUnicode_FromStringAndSize(((char const *)(__pyx_v_data + __pyx_v_start)), ((Py_ssize_t)(__pyx_v_end - __pyx_v_start))); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1778, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
/* … */
        __pyx_t_19 = __pyx_f_7questdb_7_client__obj_chunk_set(__pyx_v_out, __pyx_v_r, __pyx_t_2); if (unlikely(__pyx_t_19 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 1778, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __pyx_L17:;
 1779:                     <const char*>(data + start), <Py_ssize_t>(end - start)))
 1780:         else:
+1781:             _obj_chunk_set(out, r, b'' if is_binary else u'')
    /*else*/ {
      if (__pyx_v_is_binary) {
        __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_b__7);
        __pyx_t_2 = __pyx_mstate_global->__pyx_kp_b__7;
      } else {
        __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__7);
        __pyx_t_2 = __pyx_mstate_global->__pyx_kp_u__7;
      }
      __pyx_t_19 = __pyx_f_7questdb_7_client__obj_chunk_set(__pyx_v_out, __pyx_v_r, __pyx_t_2); if (unlikely(__pyx_t_19 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 1781, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __pyx_L16:;
    __pyx_L8_continue:;
  }
+1782:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = ((PyObject *)__pyx_v_out);
  goto __pyx_L0;
 1783: 
 1784: 
+1785: cdef object _numpy_symbol_codes_chunk(
static PyObject *__pyx_f_7questdb_7_client__numpy_symbol_codes_chunk(struct qwp_reader_batch const *__pyx_v_batch, size_t __pyx_v_col_idx, size_t __pyx_v_row_count, PyObject *__pyx_v_np) {
  struct qwp_reader_column_data __pyx_v_cd;
  questdb_error *__pyx_v_err;
  uint32_t const *__pyx_v_codes;
  uint8_t const *__pyx_v_validity;
  size_t __pyx_v_r;
  __Pyx_memviewslice __pyx_v_mv = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_out = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __PYX_XCLEAR_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_AddTraceback("questdb._client._numpy_symbol_codes_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XCLEAR_MEMVIEW(&__pyx_v_mv, 1);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1786:         const qwp_reader_batch* batch,
 1787:         size_t col_idx,
 1788:         size_t row_count,
 1789:         object np):
 1790:     cdef qwp_reader_column_data cd
+1791:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 1792:     cdef const uint32_t* codes
 1793:     cdef const uint8_t* validity
 1794:     cdef size_t r
 1795:     cdef int64_t[::1] mv
+1796:     _reader_check(
  __pyx_t_1 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_cd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_data); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 1796, __pyx_L1_error)
 1797:         qwp_reader_batch_column_data(batch, col_idx, &cd, &err), &err,
 1798:         'qwp_reader_batch_column_data')
+1799:     out = np.empty(row_count, dtype=np.int64)
  __pyx_t_3 = __pyx_v_np;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_4};
    __pyx_t_7 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1799, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_5, __pyx_t_7, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1799, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_empty, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_7);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1799, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v_out = __pyx_t_2;
  __pyx_t_2 = 0;
+1800:     if row_count == 0:
  __pyx_t_8 = (__pyx_v_row_count == 0);
  if (__pyx_t_8) {
/* … */
  }
+1801:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
+1802:     if cd.symbol_codes == NULL:
  __pyx_t_8 = (__pyx_v_cd.symbol_codes == NULL);
  if (unlikely(__pyx_t_8)) {
/* … */
  }
+1803:         raise QuestDBError(
    __pyx_t_7 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1803, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+1804:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 1804, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1805:             'symbol column has {} rows but no codes buffer'.format(row_count))
    __pyx_t_9 = __pyx_mstate_global->__pyx_kp_u_symbol_column_has_rows_but_no_co;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 1805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_10};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1805, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_7);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_3, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1803, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 1803, __pyx_L1_error)
+1806:     codes = cd.symbol_codes
  __pyx_t_11 = __pyx_v_cd.symbol_codes;
  __pyx_v_codes = __pyx_t_11;
+1807:     validity = cd.validity
  __pyx_t_12 = __pyx_v_cd.validity;
  __pyx_v_validity = __pyx_t_12;
+1808:     mv = out
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_dc_nn_int64_t(__pyx_v_out, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(2, 1808, __pyx_L1_error)
  __pyx_v_mv = __pyx_t_13;
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
+1809:     for r in range(row_count):
  __pyx_t_6 = __pyx_v_row_count;
  __pyx_t_14 = __pyx_t_6;
  for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
    __pyx_v_r = __pyx_t_15;
+1810:         if validity != NULL and ((validity[r >> 3] >> (r & 7)) & 1):
    __pyx_t_16 = (__pyx_v_validity != NULL);
    if (__pyx_t_16) {
    } else {
      __pyx_t_8 = __pyx_t_16;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_16 = ((((__pyx_v_validity[(__pyx_v_r >> 3)]) >> (__pyx_v_r & 7)) & 1) != 0);
    __pyx_t_8 = __pyx_t_16;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_8) {
/* … */
      goto __pyx_L7;
    }
+1811:             mv[r] = -1
      __pyx_t_17 = __pyx_v_r;
      __pyx_t_1 = -1;
      if (unlikely(__pyx_t_17 >= (size_t)__pyx_v_mv.shape[0])) __pyx_t_1 = 0;
      if (unlikely(__pyx_t_1 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_1);
        __PYX_ERR(2, 1811, __pyx_L1_error)
      }
      *((int64_t *) ( /* dim=0 */ ((char *) (((int64_t *) __pyx_v_mv.data) + __pyx_t_17)) )) = -1L;
 1812:         else:
+1813:             mv[r] = <int64_t>codes[r]
    /*else*/ {
      __pyx_t_17 = __pyx_v_r;
      __pyx_t_1 = -1;
      if (unlikely(__pyx_t_17 >= (size_t)__pyx_v_mv.shape[0])) __pyx_t_1 = 0;
      if (unlikely(__pyx_t_1 != -1)) {
        __Pyx_RaiseBufferIndexError(__pyx_t_1);
        __PYX_ERR(2, 1813, __pyx_L1_error)
      }
      *((int64_t *) ( /* dim=0 */ ((char *) (((int64_t *) __pyx_v_mv.data) + __pyx_t_17)) )) = ((int64_t)(__pyx_v_codes[__pyx_v_r]));
    }
    __pyx_L7:;
  }
+1814:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 1815: 
 1816: 
+1817: cdef void _symbol_categories_extend(
static void __pyx_f_7questdb_7_client__symbol_categories_extend(PyObject *__pyx_v_cats, struct qwp_reader_symbol_dict const *__pyx_v_sd, size_t __pyx_v_start) {
  size_t __pyx_v_i;
  struct qwp_reader_symbol_entry const *__pyx_v_e;
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._symbol_categories_extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 1818:         list cats, const qwp_reader_symbol_dict* sd, size_t start):
 1819:     cdef size_t i
 1820:     cdef const qwp_reader_symbol_entry* e
+1821:     for i in range(start, sd.entry_count):
  __pyx_t_1 = __pyx_v_sd->entry_count;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = __pyx_v_start; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
+1822:         e = &sd.entries[i]
    __pyx_v_e = (&(__pyx_v_sd->entries[__pyx_v_i]));
+1823:         if <uint64_t>e.offset + <uint64_t>e.length > <uint64_t>sd.heap_len:
    __pyx_t_4 = ((((uint64_t)__pyx_v_e->offset) + ((uint64_t)__pyx_v_e->length)) > ((uint64_t)__pyx_v_sd->heap_len));
    if (unlikely(__pyx_t_4)) {
/* … */
    }
+1824:             raise QuestDBError(
      __pyx_t_6 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1824, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+1825:                 QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1825, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 1825, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_6);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_9, __pyx_mstate_global->__pyx_kp_u_corrupt_symbol_dictionary_heap_o};
        __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1824, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(2, 1824, __pyx_L1_error)
 1826:                 'corrupt symbol dictionary heap offsets')
+1827:         cats.append(
    if (unlikely(__pyx_v_cats == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
      __PYX_ERR(2, 1827, __pyx_L1_error)
    }
/* … */
    __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_cats, __pyx_t_5); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 1827, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
+1828:             PyUnicode_FromStringAndSize(
    __pyx_t_5 = PyUnicode_FromStringAndSize(((char const *)(__pyx_v_sd->heap + __pyx_v_e->offset)), ((Py_ssize_t)__pyx_v_e->length)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1828, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
 1829:                 <const char*>(sd.heap + e.offset), <Py_ssize_t>e.length))
 1830: 
 1831: 
+1832: cdef class _SymbolStrings:
struct __pyx_obj_7questdb_7_client__SymbolStrings {
  PyObject_HEAD
  struct __pyx_vtabstruct_7questdb_7_client__SymbolStrings *__pyx_vtab;
  PyObject **_slots;
  size_t _cap;
  uint32_t *_decoded;
  size_t _n_decoded;
  size_t _decoded_cap;
};
/* … */
struct __pyx_vtabstruct_7questdb_7_client__SymbolStrings {
  int (*_reserve)(struct __pyx_obj_7questdb_7_client__SymbolStrings *, size_t);
  PyObject *(*_decode)(struct __pyx_obj_7questdb_7_client__SymbolStrings *, struct qwp_reader_symbol_dict const *, uint32_t);
};
static struct __pyx_vtabstruct_7questdb_7_client__SymbolStrings *__pyx_vtabptr_7questdb_7_client__SymbolStrings;

 1833:     """A row result's SYMBOL strings by dictionary code, decoded on first use.
 1834: 
 1835:     A lease that keeps the connection dictionary warm
 1836:     (``reset_symbol_dict=False``) can carry far more entries than a result
 1837:     references, so nothing is decoded up front. Within one query the
 1838:     dictionary only grows, so a decoded string stays valid for the whole
 1839:     result. Each slot named in ``_decoded`` holds its own reference.
 1840:     """
 1841:     cdef PyObject** _slots
 1842:     cdef size_t _cap
 1843:     cdef uint32_t* _decoded
 1844:     cdef size_t _n_decoded
 1845:     cdef size_t _decoded_cap
 1846: 
+1847:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_14_SymbolStrings_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_14_SymbolStrings_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_7questdb_7_client_14_SymbolStrings___cinit__(((struct __pyx_obj_7questdb_7_client__SymbolStrings *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7_client_14_SymbolStrings___cinit__(struct __pyx_obj_7questdb_7_client__SymbolStrings *__pyx_v_self) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}
+1848:         self._slots = NULL
  __pyx_v_self->_slots = NULL;
+1849:         self._cap = 0
  __pyx_v_self->_cap = 0;
+1850:         self._decoded = NULL
  __pyx_v_self->_decoded = NULL;
+1851:         self._n_decoded = 0
  __pyx_v_self->_n_decoded = 0;
+1852:         self._decoded_cap = 0
  __pyx_v_self->_decoded_cap = 0;
 1853: 
+1854:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_14_SymbolStrings_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_14_SymbolStrings_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_7questdb_7_client_14_SymbolStrings_2__dealloc__(((struct __pyx_obj_7questdb_7_client__SymbolStrings *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_7questdb_7_client_14_SymbolStrings_2__dealloc__(struct __pyx_obj_7questdb_7_client__SymbolStrings *__pyx_v_self) {
  size_t __pyx_v_i;
/* … */
  /* function exit code */
}
 1855:         cdef size_t i
+1856:         for i in range(self._n_decoded):
  __pyx_t_1 = __pyx_v_self->_n_decoded;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
+1857:             Py_XDECREF(self._slots[self._decoded[i]])
    Py_XDECREF((__pyx_v_self->_slots[(__pyx_v_self->_decoded[__pyx_v_i])]));
  }
+1858:         free(self._decoded)
  free(__pyx_v_self->_decoded);
+1859:         free(self._slots)
  free(__pyx_v_self->_slots);
 1860: 
+1861:     cdef int _reserve(self, size_t entry_count) except -1:
static int __pyx_f_7questdb_7_client_14_SymbolStrings__reserve(struct __pyx_obj_7questdb_7_client__SymbolStrings *__pyx_v_self, size_t __pyx_v_entry_count) {
  size_t __pyx_v_cap;
  PyObject **__pyx_v_slots;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._SymbolStrings._reserve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}
 1862:         cdef size_t cap
 1863:         cdef PyObject** slots
+1864:         if entry_count <= self._cap:
  __pyx_t_1 = (__pyx_v_entry_count <= __pyx_v_self->_cap);
  if (__pyx_t_1) {
/* … */
  }
+1865:             return 0
    __pyx_r = 0;
    goto __pyx_L0;
+1866:         cap = max(entry_count, 2 * self._cap)
  __pyx_t_2 = (2 * __pyx_v_self->_cap);
  __pyx_t_3 = __pyx_v_entry_count;
  __pyx_t_1 = (__pyx_t_2 > __pyx_t_3);
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_t_2;
  } else {
    __pyx_t_4 = __pyx_t_3;
  }
  __pyx_v_cap = __pyx_t_4;
+1867:         if self._slots == NULL:
  __pyx_t_1 = (__pyx_v_self->_slots == NULL);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+1868:             slots = <PyObject**>calloc(cap, sizeof(PyObject*))
    __pyx_v_slots = ((PyObject **)calloc(__pyx_v_cap, (sizeof(PyObject *))));
 1869:         else:
+1870:             slots = <PyObject**>realloc(self._slots, cap * sizeof(PyObject*))
  /*else*/ {
    __pyx_v_slots = ((PyObject **)realloc(__pyx_v_self->_slots, (__pyx_v_cap * (sizeof(PyObject *)))));
+1871:             if slots != NULL:
    __pyx_t_1 = (__pyx_v_slots != NULL);
    if (__pyx_t_1) {
/* … */
    }
  }
  __pyx_L4:;
+1872:                 memset(slots + self._cap, 0,
      (void)(memset((__pyx_v_slots + __pyx_v_self->_cap), 0, ((__pyx_v_cap - __pyx_v_self->_cap) * (sizeof(PyObject *)))));
 1873:                        (cap - self._cap) * sizeof(PyObject*))
+1874:         if slots == NULL:
  __pyx_t_1 = (__pyx_v_slots == NULL);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1875:             raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(2, 1875, __pyx_L1_error)
+1876:         self._slots = slots
  __pyx_v_self->_slots = __pyx_v_slots;
+1877:         self._cap = cap
  __pyx_v_self->_cap = __pyx_v_cap;
+1878:         return 0
  __pyx_r = 0;
  goto __pyx_L0;
 1879: 
+1880:     cdef str _decode(self, const qwp_reader_symbol_dict* sd, uint32_t code):
static PyObject *__pyx_f_7questdb_7_client_14_SymbolStrings__decode(struct __pyx_obj_7questdb_7_client__SymbolStrings *__pyx_v_self, struct qwp_reader_symbol_dict const *__pyx_v_sd, uint32_t __pyx_v_code) {
  struct qwp_reader_symbol_entry const *__pyx_v_e;
  size_t __pyx_v_cap;
  uint32_t *__pyx_v_decoded;
  PyObject *__pyx_v_s = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._SymbolStrings._decode", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1881:         cdef const qwp_reader_symbol_entry* e = &sd.entries[code]
  __pyx_v_e = (&(__pyx_v_sd->entries[__pyx_v_code]));
 1882:         cdef size_t cap
 1883:         cdef uint32_t* decoded
 1884:         cdef str s
+1885:         if <uint64_t>e.offset + <uint64_t>e.length > <uint64_t>sd.heap_len:
  __pyx_t_1 = ((((uint64_t)__pyx_v_e->offset) + ((uint64_t)__pyx_v_e->length)) > ((uint64_t)__pyx_v_sd->heap_len));
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1886:             raise QuestDBError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 1886, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+1887:                 QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 1887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_corrupt_symbol_dictionary_heap_o};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1886, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 1886, __pyx_L1_error)
 1888:                 'corrupt symbol dictionary heap offsets')
+1889:         if self._n_decoded == self._decoded_cap:
  __pyx_t_1 = (__pyx_v_self->_n_decoded == __pyx_v_self->_decoded_cap);
  if (__pyx_t_1) {
/* … */
  }
+1890:             cap = max(<size_t>16, 2 * self._decoded_cap)
    __pyx_t_7 = (2 * __pyx_v_self->_decoded_cap);
    __pyx_t_8 = ((size_t)16);
    __pyx_t_1 = (__pyx_t_7 > __pyx_t_8);
    if (__pyx_t_1) {
      __pyx_t_9 = __pyx_t_7;
    } else {
      __pyx_t_9 = __pyx_t_8;
    }
    __pyx_v_cap = __pyx_t_9;
+1891:             decoded = <uint32_t*>realloc(
    __pyx_v_decoded = ((uint32_t *)realloc(__pyx_v_self->_decoded, (__pyx_v_cap * (sizeof(uint32_t)))));
 1892:                 self._decoded, cap * sizeof(uint32_t))
+1893:             if decoded == NULL:
    __pyx_t_1 = (__pyx_v_decoded == NULL);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1894:                 raise MemoryError()
      PyErr_NoMemory(); __PYX_ERR(2, 1894, __pyx_L1_error)
+1895:             self._decoded = decoded
    __pyx_v_self->_decoded = __pyx_v_decoded;
+1896:             self._decoded_cap = cap
    __pyx_v_self->_decoded_cap = __pyx_v_cap;
+1897:         s = PyUnicode_FromStringAndSize(
  __pyx_t_2 = PyUnicode_FromStringAndSize(((char const *)(__pyx_v_sd->heap + __pyx_v_e->offset)), ((Py_ssize_t)__pyx_v_e->length)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 1897, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_s = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 1898:             <const char*>(sd.heap + e.offset), <Py_ssize_t>e.length)
+1899:         Py_INCREF(s)
  Py_INCREF(__pyx_v_s);
+1900:         self._slots[code] = <PyObject*>s
  (__pyx_v_self->_slots[__pyx_v_code]) = ((PyObject *)__pyx_v_s);
+1901:         self._decoded[self._n_decoded] = code
  (__pyx_v_self->_decoded[__pyx_v_self->_n_decoded]) = __pyx_v_code;
+1902:         self._n_decoded += 1
  __pyx_v_self->_n_decoded = (__pyx_v_self->_n_decoded + 1);
+1903:         return s
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_s);
  __pyx_r = __pyx_v_s;
  goto __pyx_L0;
 1904: 
 1905: 
+1906: cdef inline uint64_t _geohash_wire_value(
static CYTHON_INLINE uint64_t __pyx_f_7questdb_7_client__geohash_wire_value(unsigned char const *__pyx_v_src, size_t __pyx_v_row, size_t __pyx_v_stride, size_t __pyx_v_nbytes, uint64_t __pyx_v_mask) {
  size_t __pyx_v_off;
  uint64_t __pyx_v_v;
  size_t __pyx_v_b;
  uint64_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 1907:         const unsigned char* src, size_t row, size_t stride, size_t nbytes,
 1908:         uint64_t mask) noexcept nogil:
 1909:     """Row `row` of a GEOHASH column `stride` bytes wide, zero-extended.
 1910: 
 1911:     Wherever 8 bytes remain, it is one unaligned load masked to the
 1912:     value's own bytes; the last few rows assemble theirs byte by byte.
 1913:     The load reads the wire's little-endian bytes as a host integer,
 1914:     which `_numpy_uuid_chunk` also relies on."""
+1915:     cdef size_t off = row * stride
  __pyx_v_off = (__pyx_v_row * __pyx_v_stride);
+1916:     cdef uint64_t v = 0
  __pyx_v_v = 0;
 1917:     cdef size_t b
+1918:     if off + 8 <= nbytes:
  __pyx_t_1 = ((__pyx_v_off + 8) <= __pyx_v_nbytes);
  if (__pyx_t_1) {
/* … */
  }
+1919:         memcpy(&v, src + off, 8)
    (void)(memcpy((&__pyx_v_v), (__pyx_v_src + __pyx_v_off), 8));
+1920:         return v & mask
    __pyx_r = (__pyx_v_v & __pyx_v_mask);
    goto __pyx_L0;
+1921:     for b in range(stride):
  __pyx_t_2 = __pyx_v_stride;
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_b = __pyx_t_4;
+1922:         v |= (<uint64_t>src[off + b]) << (8 * b)
    __pyx_v_v = (__pyx_v_v | (((uint64_t)(__pyx_v_src[(__pyx_v_off + __pyx_v_b)])) << (8 * __pyx_v_b)));
  }
+1923:     return v
  __pyx_r = __pyx_v_v;
  goto __pyx_L0;
 1924: 
 1925: 
+1926: cdef object _numpy_geohash_chunk(
static PyObject *__pyx_f_7questdb_7_client__numpy_geohash_chunk(struct qwp_reader_batch const *__pyx_v_batch, size_t __pyx_v_col_idx, size_t __pyx_v_row_count, PyObject *__pyx_v_np) {
  struct qwp_reader_column_data __pyx_v_cd;
  questdb_error *__pyx_v_err;
  PyObject *__pyx_v_dtype = 0;
  size_t __pyx_v_stride;
  size_t __pyx_v_target;
  unsigned int __pyx_v_precision;
  Py_ssize_t __pyx_v_nbytes;
  unsigned char *__pyx_v_src;
  uint64_t __pyx_v_mask;
  void *__pyx_v_dst;
  size_t __pyx_v_r;
  PyObject *__pyx_v_out = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF((PyObject *)__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("questdb._client._numpy_geohash_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtype);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1927:         const qwp_reader_batch* batch,
 1928:         size_t col_idx,
 1929:         size_t row_count,
 1930:         object np):
 1931:     cdef qwp_reader_column_data cd
+1932:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 1933:     cdef object dtype
 1934:     cdef size_t stride
 1935:     cdef size_t target
 1936:     cdef unsigned int precision
 1937:     cdef Py_ssize_t nbytes
 1938:     cdef unsigned char* src
 1939:     cdef uint64_t mask
 1940:     cdef void* dst
 1941:     cdef size_t r
+1942:     _reader_check(
  __pyx_t_1 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_cd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_data); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 1942, __pyx_L1_error)
 1943:         qwp_reader_batch_column_data(batch, col_idx, &cd, &err), &err,
 1944:         'qwp_reader_batch_column_data')
+1945:     stride = cd.value_stride
  __pyx_t_2 = __pyx_v_cd.value_stride;
  __pyx_v_stride = __pyx_t_2;
+1946:     precision = cd.geohash_precision_bits
  __pyx_t_3 = __pyx_v_cd.geohash_precision_bits;
  __pyx_v_precision = __pyx_t_3;
 1947:     # The width comes from the precision rather than from the wire
 1948:     # stride, and is signed, so that it matches what the Arrow egress
 1949:     # gives the same column. A signed width is also what every write
 1950:     # route takes as it stands: the native Arrow importer carries a
 1951:     # `geohash` claim only on a signed Int8/16/32/64, and an unsigned
 1952:     # column reaches it only once `_dataframe_reinterpret_unsigned_geohash`
 1953:     # has given it the signed type of the same width.
 1954:     #
 1955:     # Each width carries a bit of headroom because a precision fills its
 1956:     # bits: an 8-bit geohash holds 0..255, which is every bit of an
 1957:     # unsigned byte and more than a signed one can express, so it takes
 1958:     # the 16-bit slot. That keeps every value positive in its container,
 1959:     # which is what the range check on the way back in expects.
+1960:     if precision < 1 or precision > 60:
  __pyx_t_5 = (__pyx_v_precision < 1);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_precision > 60);
  __pyx_t_4 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+1961:         raise QuestDBError(
    __pyx_t_7 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1961, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
+1962:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 1962, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 1962, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1963:             'unexpected geohash precision {} bits'.format(precision))
    __pyx_t_11 = __pyx_mstate_global->__pyx_kp_u_unexpected_geohash_precision_bit;
    __Pyx_INCREF(__pyx_t_11);
    __pyx_t_12 = __Pyx_PyLong_From_unsigned_int(__pyx_v_precision); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 1963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_12};
      __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 1963, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
    }
    __pyx_t_2 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
      assert(__pyx_t_7);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
      __pyx_t_2 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_10, __pyx_t_9};
      __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_2, (3-__pyx_t_2) | (__pyx_t_2*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1961, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(2, 1961, __pyx_L1_error)
+1964:     if precision <= 7:
  __pyx_t_4 = (__pyx_v_precision <= 7);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L6;
  }
+1965:         dtype = np.dtype(np.int8)
    __pyx_t_8 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_int8); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 1965, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_9};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1965, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_v_dtype = __pyx_t_6;
    __pyx_t_6 = 0;
+1966:         target = 1
    __pyx_v_target = 1;
+1967:     elif precision <= 15:
  __pyx_t_4 = (__pyx_v_precision <= 15);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L6;
  }
+1968:         dtype = np.dtype(np.int16)
    __pyx_t_9 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_int16); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1968, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_8};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1968, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_v_dtype = __pyx_t_6;
    __pyx_t_6 = 0;
+1969:         target = 2
    __pyx_v_target = 2;
+1970:     elif precision <= 31:
  __pyx_t_4 = (__pyx_v_precision <= 31);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L6;
  }
+1971:         dtype = np.dtype(np.int32)
    __pyx_t_8 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_int32); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 1971, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_9};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1971, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_v_dtype = __pyx_t_6;
    __pyx_t_6 = 0;
+1972:         target = 4
    __pyx_v_target = 4;
 1973:     else:
+1974:         dtype = np.dtype(np.int64)
  /*else*/ {
    __pyx_t_9 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_int64); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_8};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1974, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_v_dtype = __pyx_t_6;
    __pyx_t_6 = 0;
+1975:         target = 8
    __pyx_v_target = 8;
  }
  __pyx_L6:;
+1976:     if stride == 0 or stride > target:
  __pyx_t_5 = (__pyx_v_stride == 0);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_stride > __pyx_v_target);
  __pyx_t_4 = __pyx_t_5;
  __pyx_L8_bool_binop_done:;
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+1977:         raise QuestDBError(
    __pyx_t_8 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 1977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
+1978:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 1978, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1978, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1979:             'geohash column of {} bits arrived {} bytes wide'.format(
    __pyx_t_12 = __pyx_mstate_global->__pyx_kp_u_geohash_column_of_bits_arrived_b;
    __Pyx_INCREF(__pyx_t_12);
+1980:                 precision, stride))
    __pyx_t_11 = __Pyx_PyLong_From_unsigned_int(__pyx_v_precision); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 1980, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_13 = __Pyx_PyLong_FromSize_t(__pyx_v_stride); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 1980, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_12, __pyx_t_11, __pyx_t_13};
      __pyx_t_10 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_2, (3-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 1979, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
    }
    __pyx_t_2 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
      assert(__pyx_t_8);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
      __pyx_t_2 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_7, __pyx_t_10};
      __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_2, (3-__pyx_t_2) | (__pyx_t_2*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1977, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(2, 1977, __pyx_L1_error)
+1981:     if row_count == 0:
  __pyx_t_4 = (__pyx_v_row_count == 0);
  if (__pyx_t_4) {
/* … */
  }
+1982:         return np.empty(0, dtype=dtype)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_9 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, __pyx_mstate_global->__pyx_int_0};
      __pyx_t_10 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 1982, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_v_dtype, __pyx_t_10, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1982, __pyx_L1_error)
      __pyx_t_6 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_empty, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1982, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
+1983:     if cd.values == NULL:
  __pyx_t_4 = (__pyx_v_cd.values == NULL);
  if (unlikely(__pyx_t_4)) {
/* … */
  }
+1984:         raise QuestDBError(
    __pyx_t_10 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 1984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
+1985:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1985, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1985, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+1986:             'geohash column has {} rows but no values buffer'.format(row_count))
    __pyx_t_13 = __pyx_mstate_global->__pyx_kp_u_geohash_column_has_rows_but_no_v;
    __Pyx_INCREF(__pyx_t_13);
    __pyx_t_11 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 1986, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_11};
      __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1986, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_t_2 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
      assert(__pyx_t_10);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
      __pyx_t_2 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_8, __pyx_t_7};
      __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_2, (3-__pyx_t_2) | (__pyx_t_2*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(2, 1984, __pyx_L1_error)
+1987:     nbytes = <Py_ssize_t>(row_count * stride)
  __pyx_v_nbytes = ((Py_ssize_t)(__pyx_v_row_count * __pyx_v_stride));
+1988:     src = <unsigned char*>cd.values
  __pyx_v_src = ((unsigned char *)__pyx_v_cd.values);
+1989:     if stride == target:
  __pyx_t_4 = (__pyx_v_stride == __pyx_v_target);
  if (__pyx_t_4) {
/* … */
  }
+1990:         return np.frombuffer((<unsigned char[:nbytes]>src), dtype=dtype).copy()
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_8 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_8);
    if (!__pyx_v_src) {
      PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");
      __PYX_ERR(2, 1990, __pyx_L1_error)
    }
    __pyx_t_11 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_unsigned_char); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 1990, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_10 = Py_BuildValue("("  __PYX_BUILD_PY_SSIZE_T  ")", ((Py_ssize_t)__pyx_v_nbytes)); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 1990, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    #if CYTHON_COMPILING_IN_LIMITED_API
    __pyx_t_15 = PyBytes_AsString(__pyx_t_11); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 1990, __pyx_L1_error)
    #else
    __pyx_t_15 = PyBytes_AS_STRING(__pyx_t_11);
    #endif
    __pyx_t_14 = __pyx_array_new(__pyx_t_10, sizeof(unsigned char), __pyx_t_15, "c", (char *) __pyx_v_src); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 1990, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_14);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_8, ((PyObject *)__pyx_t_14)};
      __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 1990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_v_dtype, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1990, __pyx_L1_error)
      __pyx_t_7 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_frombuffer, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF((PyObject *)__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_t_9 = __pyx_t_7;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_2, (1-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
+1991:     if stride == 1 or stride == 2 or stride == 4:
  switch (__pyx_v_stride) {
    case 1:
    case 2:
    case 4:
/* … */
    break;
    default: break;
  }
 1992:         # A narrower power-of-two width widens in one vectorized cast.
+1993:         return np.frombuffer(
    __Pyx_XDECREF(__pyx_r);
/* … */
    __pyx_t_11 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_11);
+1994:             (<unsigned char[:nbytes]>src),
    if (!__pyx_v_src) {
      PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");
      __PYX_ERR(2, 1994, __pyx_L1_error)
    }
    __pyx_t_10 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_unsigned_char); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 1994, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_8 = Py_BuildValue("("  __PYX_BUILD_PY_SSIZE_T  ")", ((Py_ssize_t)__pyx_v_nbytes)); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1994, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    #if CYTHON_COMPILING_IN_LIMITED_API
    __pyx_t_15 = PyBytes_AsString(__pyx_t_10); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 1994, __pyx_L1_error)
    #else
    __pyx_t_15 = PyBytes_AS_STRING(__pyx_t_10);
    #endif
    __pyx_t_14 = __pyx_array_new(__pyx_t_8, sizeof(unsigned char), __pyx_t_15, "c", (char *) __pyx_v_src); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 1994, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_14);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1995:             dtype=np.dtype('<u{}'.format(stride))).astype(dtype)
    __pyx_t_8 = __pyx_v_np;
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_12 = __pyx_mstate_global->__pyx_kp_u_u;
    __Pyx_INCREF(__pyx_t_12);
    __pyx_t_16 = __Pyx_PyLong_FromSize_t(__pyx_v_stride); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 1995, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_16};
      __pyx_t_13 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 1995, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
    }
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_13};
      __pyx_t_10 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dtype, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 1995, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
    }
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_11, ((PyObject *)__pyx_t_14)};
      __pyx_t_13 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 1993, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_10, __pyx_t_13, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1993, __pyx_L1_error)
      __pyx_t_9 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_frombuffer, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_13);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF((PyObject *)__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 1993, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
    }
    __pyx_t_7 = __pyx_t_9;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_2 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_dtype};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1995, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
 1996:     # Strides 3, 5, 6 and 7 have no NumPy integer type to cast from, so
 1997:     # each value is assembled from its bytes.
+1998:     mask = (<uint64_t>1 << (8 * stride)) - 1
  __pyx_v_mask = ((((uint64_t)1) << (8 * __pyx_v_stride)) - 1);
+1999:     out = np.empty(<Py_ssize_t>row_count, dtype=dtype)
  __pyx_t_9 = __pyx_v_np;
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_7 = PyLong_FromSsize_t(((Py_ssize_t)__pyx_v_row_count)); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 1999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, __pyx_t_7};
    __pyx_t_13 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 1999, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_v_dtype, __pyx_t_13, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 1999, __pyx_L1_error)
    __pyx_t_6 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_empty, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_13);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 1999, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
  }
  __pyx_v_out = __pyx_t_6;
  __pyx_t_6 = 0;
+2000:     dst = cnp.PyArray_DATA(<cnp.ndarray>out)
  __pyx_v_dst = PyArray_DATA(((PyArrayObject *)__pyx_v_out));
+2001:     with nogil:
  {
      PyThreadState * _save;
      _save = PyEval_SaveThread();
      __Pyx_FastGIL_Remember();
      /*try:*/ {
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_FastGIL_Forget();
          PyEval_RestoreThread(_save);
          goto __pyx_L15;
        }
        __pyx_L15:;
      }
  }
+2002:         if target == 4:
        __pyx_t_4 = (__pyx_v_target == 4);
        if (__pyx_t_4) {
/* … */
          goto __pyx_L16;
        }
+2003:             for r in range(row_count):
          __pyx_t_2 = __pyx_v_row_count;
          __pyx_t_17 = __pyx_t_2;
          for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
            __pyx_v_r = __pyx_t_18;
+2004:                 (<int32_t*>dst)[r] = <int32_t>_geohash_wire_value(
            (((int32_t *)__pyx_v_dst)[__pyx_v_r]) = ((int32_t)__pyx_f_7questdb_7_client__geohash_wire_value(__pyx_v_src, __pyx_v_r, __pyx_v_stride, ((size_t)__pyx_v_nbytes), __pyx_v_mask));
          }
 2005:                     src, r, stride, <size_t>nbytes, mask)
 2006:         else:
+2007:             for r in range(row_count):
        /*else*/ {
          __pyx_t_2 = __pyx_v_row_count;
          __pyx_t_17 = __pyx_t_2;
          for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
            __pyx_v_r = __pyx_t_18;
+2008:                 (<int64_t*>dst)[r] = <int64_t>_geohash_wire_value(
            (((int64_t *)__pyx_v_dst)[__pyx_v_r]) = ((int64_t)__pyx_f_7questdb_7_client__geohash_wire_value(__pyx_v_src, __pyx_v_r, __pyx_v_stride, ((size_t)__pyx_v_nbytes), __pyx_v_mask));
          }
        }
        __pyx_L16:;
      }
 2009:                     src, r, stride, <size_t>nbytes, mask)
+2010:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;
 2011: 
 2012: 
+2013: cdef object _numpy_uuid_chunk(
static PyObject *__pyx_f_7questdb_7_client__numpy_uuid_chunk(struct qwp_reader_batch const *__pyx_v_batch, size_t __pyx_v_col_idx, size_t __pyx_v_row_count, PyObject *__pyx_v_np) {
  PyObject *__pyx_v_uuid_cls = 0;
  struct qwp_reader_column_data __pyx_v_cd;
  questdb_error *__pyx_v_err;
  uint8_t const *__pyx_v_validity;
  uint8_t const *__pyx_v_values;
  size_t __pyx_v_r;
  size_t __pyx_v_stride;
  uint64_t __pyx_v_lo;
  uint64_t __pyx_v_hi;
  PyArrayObject *__pyx_v_out = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client._numpy_uuid_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_uuid_cls);
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2014:         const qwp_reader_batch* batch,
 2015:         size_t col_idx,
 2016:         size_t row_count,
 2017:         object np):
+2018:     cdef object uuid_cls = _uuid.UUID
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_uuid_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2018, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2018, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_uuid_cls = __pyx_t_2;
  __pyx_t_2 = 0;
 2019:     cdef qwp_reader_column_data cd
+2020:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2021:     cdef const uint8_t* validity
 2022:     cdef const uint8_t* values
 2023:     cdef size_t r
 2024:     cdef size_t stride
 2025:     cdef uint64_t lo
 2026:     cdef uint64_t hi
 2027:     cdef cnp.ndarray out
+2028:     _reader_check(
  __pyx_t_3 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_cd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_data); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 2028, __pyx_L1_error)
 2029:         qwp_reader_batch_column_data(batch, col_idx, &cd, &err), &err,
 2030:         'qwp_reader_batch_column_data')
+2031:     out = np.empty(row_count, dtype=object)
  __pyx_t_1 = __pyx_v_np;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2031, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_t_4};
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2031, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_builtin_object, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2031, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_empty, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2031, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(2, 2031, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+2032:     if row_count == 0:
  __pyx_t_7 = (__pyx_v_row_count == 0);
  if (__pyx_t_7) {
/* … */
  }
+2033:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = ((PyObject *)__pyx_v_out);
    goto __pyx_L0;
+2034:     if cd.values == NULL:
  __pyx_t_7 = (__pyx_v_cd.values == NULL);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+2035:         raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+2036:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2036, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2036, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2037:             'uuid column has {} rows but no values buffer'.format(row_count))
    __pyx_t_9 = __pyx_mstate_global->__pyx_kp_u_uuid_column_has_rows_but_no_valu;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2037, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_10};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2037, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_1};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2035, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 2035, __pyx_L1_error)
+2038:     validity = cd.validity
  __pyx_t_11 = __pyx_v_cd.validity;
  __pyx_v_validity = __pyx_t_11;
+2039:     values = <const uint8_t*>cd.values
  __pyx_v_values = ((uint8_t const *)__pyx_v_cd.values);
+2040:     stride = cd.value_stride if cd.value_stride != 0 else 16
  __pyx_t_7 = (__pyx_v_cd.value_stride != 0);
  if (__pyx_t_7) {
    __pyx_t_5 = __pyx_v_cd.value_stride;
  } else {
    __pyx_t_5 = 16;
  }
  __pyx_v_stride = __pyx_t_5;
+2041:     for r in range(row_count):
  __pyx_t_5 = __pyx_v_row_count;
  __pyx_t_12 = __pyx_t_5;
  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
    __pyx_v_r = __pyx_t_13;
+2042:         if validity != NULL and ((validity[r >> 3] >> (r & 7)) & 1):
    __pyx_t_14 = (__pyx_v_validity != NULL);
    if (__pyx_t_14) {
    } else {
      __pyx_t_7 = __pyx_t_14;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_14 = ((((__pyx_v_validity[(__pyx_v_r >> 3)]) >> (__pyx_v_r & 7)) & 1) != 0);
    __pyx_t_7 = __pyx_t_14;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_7) {
/* … */
    }
+2043:             continue
      goto __pyx_L5_continue;
 2044:         # The reader hands out canonical RFC 4122 big-endian rows,
 2045:         # having already reversed them out of QWP wire order: the first
 2046:         # eight bytes are the high half and the second eight the low
 2047:         # half, each most-significant byte first. `UUID(int=...)` takes
 2048:         # the two halves as host-order integers, so each one is byte
 2049:         # swapped on the way in. `UUID(bytes=...)` would accept the row
 2050:         # verbatim but costs about 70 ns more per row, because CPython
 2051:         # builds the same integer from the buffer anyway on top of
 2052:         # allocating a `bytes` object for every row.
+2053:         memcpy(&hi, values + r * stride, 8)
    (void)(memcpy((&__pyx_v_hi), (__pyx_v_values + (__pyx_v_r * __pyx_v_stride)), 8));
+2054:         memcpy(&lo, values + r * stride + 8, 8)
    (void)(memcpy((&__pyx_v_lo), ((__pyx_v_values + (__pyx_v_r * __pyx_v_stride)) + 8), 8));
+2055:         hi = bswap64(hi)
    __pyx_v_hi = __pyx_f_7questdb_7_client_bswap64(__pyx_v_hi);
+2056:         lo = bswap64(lo)
    __pyx_v_lo = __pyx_f_7questdb_7_client_bswap64(__pyx_v_lo);
+2057:         _obj_chunk_set(
    __pyx_t_16 = __pyx_f_7questdb_7_client__obj_chunk_set(__pyx_v_out, __pyx_v_r, __pyx_t_2); if (unlikely(__pyx_t_16 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 2057, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_L5_continue:;
  }
+2058:             out, r, uuid_cls(int=((<object>hi) << 64) | (<object>lo)))
    __pyx_t_4 = NULL;
    __Pyx_INCREF(__pyx_v_uuid_cls);
    __pyx_t_1 = __pyx_v_uuid_cls; 
    __pyx_t_8 = __Pyx_PyLong_From_uint64_t(__pyx_v_hi); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_6 = PyNumber_Lshift(__pyx_t_8, __pyx_mstate_global->__pyx_int_64); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyLong_From_uint64_t(__pyx_v_lo); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_10 = PyNumber_Or(__pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_15 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
      __pyx_t_15 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, NULL};
      __pyx_t_8 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2058, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_int, __pyx_t_10, __pyx_t_8, __pyx_callargs+1, 0) < (0)) __PYX_ERR(2, 2058, __pyx_L1_error)
      __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_15, (1-__pyx_t_15) | (__pyx_t_15*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2058, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
+2059:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = ((PyObject *)__pyx_v_out);
  goto __pyx_L0;
 2060: 
 2061: 
+2062: cdef object _numpy_long256_chunk(
static PyObject *__pyx_f_7questdb_7_client__numpy_long256_chunk(struct qwp_reader_batch const *__pyx_v_batch, size_t __pyx_v_col_idx, size_t __pyx_v_row_count, PyObject *__pyx_v_np) {
  struct qwp_reader_column_data __pyx_v_cd;
  questdb_error *__pyx_v_err;
  uint8_t const *__pyx_v_validity;
  uint8_t const *__pyx_v_values;
  size_t __pyx_v_r;
  size_t __pyx_v_stride;
  PyArrayObject *__pyx_v_out = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client._numpy_long256_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2063:         const qwp_reader_batch* batch,
 2064:         size_t col_idx,
 2065:         size_t row_count,
 2066:         object np):
 2067:     cdef qwp_reader_column_data cd
+2068:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2069:     cdef const uint8_t* validity
 2070:     cdef const uint8_t* values
 2071:     cdef size_t r
 2072:     cdef size_t stride
 2073:     cdef cnp.ndarray out
+2074:     _reader_check(
  __pyx_t_1 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_cd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_data); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 2074, __pyx_L1_error)
 2075:         qwp_reader_batch_column_data(batch, col_idx, &cd, &err), &err,
 2076:         'qwp_reader_batch_column_data')
+2077:     out = np.empty(row_count, dtype=object)
  __pyx_t_3 = __pyx_v_np;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_4};
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_builtin_object, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2077, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_empty, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2077, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(2, 2077, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+2078:     if row_count == 0:
  __pyx_t_7 = (__pyx_v_row_count == 0);
  if (__pyx_t_7) {
/* … */
  }
+2079:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = ((PyObject *)__pyx_v_out);
    goto __pyx_L0;
+2080:     if cd.values == NULL:
  __pyx_t_7 = (__pyx_v_cd.values == NULL);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+2081:         raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2081, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+2082:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2083:             'long256 column has {} rows but no values buffer'.format(row_count))
    __pyx_t_9 = __pyx_mstate_global->__pyx_kp_u_long256_column_has_rows_but_no_v;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2083, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_10};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2083, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2081, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 2081, __pyx_L1_error)
+2084:     validity = cd.validity
  __pyx_t_11 = __pyx_v_cd.validity;
  __pyx_v_validity = __pyx_t_11;
+2085:     values = <const uint8_t*>cd.values
  __pyx_v_values = ((uint8_t const *)__pyx_v_cd.values);
+2086:     stride = cd.value_stride if cd.value_stride != 0 else 32
  __pyx_t_7 = (__pyx_v_cd.value_stride != 0);
  if (__pyx_t_7) {
    __pyx_t_5 = __pyx_v_cd.value_stride;
  } else {
    __pyx_t_5 = 32;
  }
  __pyx_v_stride = __pyx_t_5;
+2087:     for r in range(row_count):
  __pyx_t_5 = __pyx_v_row_count;
  __pyx_t_12 = __pyx_t_5;
  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
    __pyx_v_r = __pyx_t_13;
+2088:         if validity != NULL and ((validity[r >> 3] >> (r & 7)) & 1):
    __pyx_t_14 = (__pyx_v_validity != NULL);
    if (__pyx_t_14) {
    } else {
      __pyx_t_7 = __pyx_t_14;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_14 = ((((__pyx_v_validity[(__pyx_v_r >> 3)]) >> (__pyx_v_r & 7)) & 1) != 0);
    __pyx_t_7 = __pyx_t_14;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_7) {
/* … */
    }
+2089:             continue
      goto __pyx_L5_continue;
+2090:         _obj_chunk_set(out, r, int.from_bytes(
    __pyx_t_4 = ((PyObject *)(&PyLong_Type));
    __Pyx_INCREF(__pyx_t_4);
/* … */
    __pyx_t_16 = __pyx_f_7questdb_7_client__obj_chunk_set(__pyx_v_out, __pyx_v_r, __pyx_t_2); if (unlikely(__pyx_t_16 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 2090, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_L5_continue:;
  }
+2091:             PyBytes_FromStringAndSize(<const char*>(values + r * stride), 32),
    __pyx_t_3 = PyBytes_FromStringAndSize(((char const *)(__pyx_v_values + (__pyx_v_r * __pyx_v_stride))), 32); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2091, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+2092:             'little', signed=False))
    __pyx_t_15 = 0;
    {
      PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_3, __pyx_mstate_global->__pyx_n_u_little};
      __pyx_t_8 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2090, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_signed, Py_False, __pyx_t_8, __pyx_callargs+3, 0) < (0)) __PYX_ERR(2, 2090, __pyx_L1_error)
      __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_from_bytes, __pyx_callargs+__pyx_t_15, (3-__pyx_t_15) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2090, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
+2093:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = ((PyObject *)__pyx_v_out);
  goto __pyx_L0;
 2094: 
 2095: 
+2096: cdef object _numpy_decimal_chunk(
static PyObject *__pyx_f_7questdb_7_client__numpy_decimal_chunk(struct qwp_reader_batch const *__pyx_v_batch, size_t __pyx_v_col_idx, size_t __pyx_v_row_count, PyObject *__pyx_v_np) {
  PyObject *__pyx_v_decimal_cls = 0;
  struct qwp_reader_column_data __pyx_v_cd;
  questdb_error *__pyx_v_err;
  uint8_t const *__pyx_v_validity;
  uint8_t const *__pyx_v_values;
  size_t __pyx_v_r;
  size_t __pyx_v_width;
  int __pyx_v_scale;
  PyArrayObject *__pyx_v_out = 0;
  PyObject *__pyx_v_unscaled = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client._numpy_decimal_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_decimal_cls);
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_unscaled);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_18_numpy_array_chunk_2generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 2097:         const qwp_reader_batch* batch,
 2098:         size_t col_idx,
 2099:         size_t row_count,
 2100:         object np):
+2101:     cdef object decimal_cls = Decimal
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_decimal_cls = __pyx_t_1;
  __pyx_t_1 = 0;
 2102:     cdef qwp_reader_column_data cd
+2103:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2104:     cdef const uint8_t* validity
 2105:     cdef const uint8_t* values
 2106:     cdef size_t r
 2107:     cdef size_t width
 2108:     cdef int scale
 2109:     cdef cnp.ndarray out
+2110:     _reader_check(
  __pyx_t_2 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_cd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_data); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 2110, __pyx_L1_error)
 2111:         qwp_reader_batch_column_data(batch, col_idx, &cd, &err), &err,
 2112:         'qwp_reader_batch_column_data')
+2113:     out = np.empty(row_count, dtype=object)
  __pyx_t_3 = __pyx_v_np;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_4};
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_builtin_object, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2113, __pyx_L1_error)
    __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_empty, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(2, 2113, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+2114:     if row_count == 0:
  __pyx_t_7 = (__pyx_v_row_count == 0);
  if (__pyx_t_7) {
/* … */
  }
+2115:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = ((PyObject *)__pyx_v_out);
    goto __pyx_L0;
+2116:     if cd.values == NULL:
  __pyx_t_7 = (__pyx_v_cd.values == NULL);
  if (unlikely(__pyx_t_7)) {
/* … */
  }
+2117:         raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+2118:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2119:             'decimal column has {} rows but no values buffer'.format(row_count))
    __pyx_t_9 = __pyx_mstate_global->__pyx_kp_u_decimal_column_has_rows_but_no_v;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_10};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2119, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_3};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2117, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 2117, __pyx_L1_error)
+2120:     validity = cd.validity
  __pyx_t_11 = __pyx_v_cd.validity;
  __pyx_v_validity = __pyx_t_11;
+2121:     values = <const uint8_t*>cd.values
  __pyx_v_values = ((uint8_t const *)__pyx_v_cd.values);
+2122:     width = cd.value_stride
  __pyx_t_5 = __pyx_v_cd.value_stride;
  __pyx_v_width = __pyx_t_5;
+2123:     scale = cd.decimal_scale
  __pyx_t_12 = __pyx_v_cd.decimal_scale;
  __pyx_v_scale = __pyx_t_12;
+2124:     for r in range(row_count):
  __pyx_t_5 = __pyx_v_row_count;
  __pyx_t_13 = __pyx_t_5;
  for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
    __pyx_v_r = __pyx_t_14;
+2125:         if validity != NULL and ((validity[r >> 3] >> (r & 7)) & 1):
    __pyx_t_15 = (__pyx_v_validity != NULL);
    if (__pyx_t_15) {
    } else {
      __pyx_t_7 = __pyx_t_15;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_15 = ((((__pyx_v_validity[(__pyx_v_r >> 3)]) >> (__pyx_v_r & 7)) & 1) != 0);
    __pyx_t_7 = __pyx_t_15;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_7) {
/* … */
    }
+2126:             continue
      goto __pyx_L5_continue;
+2127:         unscaled = int.from_bytes(
    __pyx_t_4 = ((PyObject *)(&PyLong_Type));
    __Pyx_INCREF(__pyx_t_4);
+2128:             PyBytes_FromStringAndSize(
    __pyx_t_3 = PyBytes_FromStringAndSize(((char const *)(__pyx_v_values + (__pyx_v_r * __pyx_v_width))), ((Py_ssize_t)__pyx_v_width)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2128, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
 2129:                 <const char*>(values + r * width), <Py_ssize_t>width),
+2130:             'little', signed=True)
    __pyx_t_16 = 0;
    {
      PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_3, __pyx_mstate_global->__pyx_n_u_little};
      __pyx_t_8 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2127, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_signed, Py_True, __pyx_t_8, __pyx_callargs+3, 0) < (0)) __PYX_ERR(2, 2127, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_from_bytes, __pyx_callargs+__pyx_t_16, (3-__pyx_t_16) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2127, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_unscaled, __pyx_t_1);
    __pyx_t_1 = 0;
+2131:         _obj_chunk_set(out, r, decimal_cls(f'{unscaled}e{-scale}'))
    __pyx_t_8 = NULL;
    __Pyx_INCREF(__pyx_v_decimal_cls);
    __pyx_t_3 = __pyx_v_decimal_cls; 
    __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_unscaled, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyUnicode_From_int((-__pyx_v_scale), 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_17[0] = __pyx_t_4;
    __pyx_t_17[1] = __pyx_mstate_global->__pyx_n_u_e;
    __pyx_t_17[2] = __pyx_t_6;
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_17, 3, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 1 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4));
    if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_16 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_8);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
      __pyx_t_16 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_10};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_16, (2-__pyx_t_16) | (__pyx_t_16*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2131, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_18 = __pyx_f_7questdb_7_client__obj_chunk_set(__pyx_v_out, __pyx_v_r, __pyx_t_1); if (unlikely(__pyx_t_18 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 2131, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_L5_continue:;
  }
+2132:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = ((PyObject *)__pyx_v_out);
  goto __pyx_L0;
 2133: 
 2134: 
+2135: cdef object _numpy_array_chunk(
static PyObject *__pyx_f_7questdb_7_client__numpy_array_chunk(struct qwp_reader_batch const *__pyx_v_batch, size_t __pyx_v_col_idx, enum qwp_reader_column_kind __pyx_v_kind, size_t __pyx_v_row_count, PyObject *__pyx_v_np) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_1___pyx_f_7questdb_7_client__numpy_array_chunk *__pyx_cur_scope;
  struct qwp_reader_array_data __pyx_v_ad;
  questdb_error *__pyx_v_err;
  uint8_t const *__pyx_v_validity;
  uint8_t const *__pyx_v_data;
  uint32_t const *__pyx_v_data_offsets;
  uint32_t const *__pyx_v_shape_offsets;
  size_t __pyx_v_r;
  uint32_t __pyx_v_dstart;
  uint32_t __pyx_v_dend;
  Py_ssize_t __pyx_v_blen;
  PyArrayObject *__pyx_v_out = 0;
  PyObject *__pyx_v_flat = NULL;
  PyObject *__pyx_gb_7questdb_7_client_18_numpy_array_chunk_2generator4 = 0;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_1___pyx_f_7questdb_7_client__numpy_array_chunk *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_1___pyx_f_7questdb_7_client__numpy_array_chunk(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_1___pyx_f_7questdb_7_client__numpy_array_chunk, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_1___pyx_f_7questdb_7_client__numpy_array_chunk *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(2, 2135, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF((PyObject *)__pyx_t_21);
  __Pyx_AddTraceback("questdb._client._numpy_array_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_flat);
  __Pyx_XDECREF(__pyx_gb_7questdb_7_client_18_numpy_array_chunk_2generator4);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_1___pyx_f_7questdb_7_client__numpy_array_chunk {
  PyObject_HEAD
  uint32_t __pyx_v_send;
  uint32_t const *__pyx_v_shapes;
  uint32_t __pyx_v_sstart;
};

 2136:         const qwp_reader_batch* batch,
 2137:         size_t col_idx,
 2138:         qwp_reader_column_kind kind,
 2139:         size_t row_count,
 2140:         object np):
 2141:     cdef qwp_reader_array_data ad
+2142:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2143:     cdef const uint8_t* validity
 2144:     cdef const uint8_t* data
 2145:     cdef const uint32_t* data_offsets
 2146:     cdef const uint32_t* shapes
 2147:     cdef const uint32_t* shape_offsets
 2148:     cdef size_t r
 2149:     cdef size_t k
 2150:     cdef uint32_t dstart
 2151:     cdef uint32_t dend
 2152:     cdef uint32_t sstart
 2153:     cdef uint32_t send
 2154:     cdef Py_ssize_t blen
 2155:     cdef cnp.ndarray out
+2156:     if kind != qwp_reader_column_kind_double_array:
  __pyx_t_1 = (__pyx_v_kind != qwp_reader_column_kind_double_array);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2157:         raise QuestDBError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2157, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+2158:             QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2158, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2158, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+2159:             'numpy egress supports only double arrays (kind 0x{:02X})'.format(
    __pyx_t_7 = __pyx_mstate_global->__pyx_kp_u_numpy_egress_supports_only_doubl;
    __Pyx_INCREF(__pyx_t_7);
+2160:                 <int>kind))
    __pyx_t_8 = __Pyx_PyLong_From_int(((int)__pyx_v_kind)); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2159, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2157, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 2157, __pyx_L1_error)
+2161:     _reader_check(
  __pyx_t_10 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_array_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_ad), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_array_column_da); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(2, 2161, __pyx_L1_error)
 2162:         qwp_reader_batch_array_column_data(batch, col_idx, &ad, &err), &err,
 2163:         'qwp_reader_batch_array_column_data')
+2164:     out = np.empty(row_count, dtype=object)
  __pyx_t_4 = __pyx_v_np;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_5};
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2164, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_builtin_object, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2164, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_empty, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2164, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(2, 2164, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+2165:     if row_count == 0:
  __pyx_t_1 = (__pyx_v_row_count == 0);
  if (__pyx_t_1) {
/* … */
  }
+2166:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = ((PyObject *)__pyx_v_out);
    goto __pyx_L0;
+2167:     if ad.data_offsets == NULL or ad.shape_offsets == NULL:
  __pyx_t_11 = (__pyx_v_ad.data_offsets == NULL);
  if (!__pyx_t_11) {
  } else {
    __pyx_t_1 = __pyx_t_11;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_11 = (__pyx_v_ad.shape_offsets == NULL);
  __pyx_t_1 = __pyx_t_11;
  __pyx_L6_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2168:         raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2168, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+2169:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2170:             'array column has {} rows but no offset tables'.format(row_count))
    __pyx_t_8 = __pyx_mstate_global->__pyx_kp_u_array_column_has_rows_but_no_off;
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2170, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_7};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_4};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2168, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 2168, __pyx_L1_error)
+2171:     if ad.data == NULL and ad.data_len > 0:
  __pyx_t_11 = (__pyx_v_ad.data == NULL);
  if (__pyx_t_11) {
  } else {
    __pyx_t_1 = __pyx_t_11;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_11 = (__pyx_v_ad.data_len > 0);
  __pyx_t_1 = __pyx_t_11;
  __pyx_L9_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2172:         raise QuestDBError(
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+2173:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+2174:             'array column has {} data bytes but no data buffer'.format(
    __pyx_t_7 = __pyx_mstate_global->__pyx_kp_u_array_column_has_data_bytes_but;
    __Pyx_INCREF(__pyx_t_7);
+2175:                 ad.data_len))
    __pyx_t_8 = __Pyx_PyLong_FromSize_t(__pyx_v_ad.data_len); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2175, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2172, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 2172, __pyx_L1_error)
+2176:     if ad.shapes == NULL and ad.shapes_len > 0:
  __pyx_t_11 = (__pyx_v_ad.shapes == NULL);
  if (__pyx_t_11) {
  } else {
    __pyx_t_1 = __pyx_t_11;
    goto __pyx_L12_bool_binop_done;
  }
  __pyx_t_11 = (__pyx_v_ad.shapes_len > 0);
  __pyx_t_1 = __pyx_t_11;
  __pyx_L12_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2177:         raise QuestDBError(
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+2178:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2178, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2178, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2179:             'array column has {} shape entries but no shapes buffer'.format(
    __pyx_t_8 = __pyx_mstate_global->__pyx_kp_u_array_column_has_shape_entries_b;
    __Pyx_INCREF(__pyx_t_8);
+2180:                 ad.shapes_len))
    __pyx_t_7 = __Pyx_PyLong_FromSize_t(__pyx_v_ad.shapes_len); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2180, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_7};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2179, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_6};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_9, (3-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2177, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 2177, __pyx_L1_error)
+2181:     validity = ad.validity
  __pyx_t_12 = __pyx_v_ad.validity;
  __pyx_v_validity = __pyx_t_12;
+2182:     data = ad.data
  __pyx_t_13 = __pyx_v_ad.data;
  __pyx_v_data = __pyx_t_13;
+2183:     data_offsets = ad.data_offsets
  __pyx_t_14 = __pyx_v_ad.data_offsets;
  __pyx_v_data_offsets = __pyx_t_14;
+2184:     shapes = ad.shapes
  __pyx_t_15 = __pyx_v_ad.shapes;
  __pyx_cur_scope->__pyx_v_shapes = __pyx_t_15;
+2185:     shape_offsets = ad.shape_offsets
  __pyx_t_16 = __pyx_v_ad.shape_offsets;
  __pyx_v_shape_offsets = __pyx_t_16;
+2186:     for r in range(row_count):
  __pyx_t_9 = __pyx_v_row_count;
  __pyx_t_17 = __pyx_t_9;
  for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
    __pyx_v_r = __pyx_t_18;
+2187:         if validity != NULL and ((validity[r >> 3] >> (r & 7)) & 1):
    __pyx_t_11 = (__pyx_v_validity != NULL);
    if (__pyx_t_11) {
    } else {
      __pyx_t_1 = __pyx_t_11;
      goto __pyx_L17_bool_binop_done;
    }
    __pyx_t_11 = ((((__pyx_v_validity[(__pyx_v_r >> 3)]) >> (__pyx_v_r & 7)) & 1) != 0);
    __pyx_t_1 = __pyx_t_11;
    __pyx_L17_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
+2188:             continue
      goto __pyx_L14_continue;
+2189:         dstart = data_offsets[r]
    __pyx_v_dstart = (__pyx_v_data_offsets[__pyx_v_r]);
+2190:         dend = data_offsets[r + 1]
    __pyx_v_dend = (__pyx_v_data_offsets[(__pyx_v_r + 1)]);
+2191:         if dend < dstart or <uint64_t>dend > <uint64_t>ad.data_len:
    __pyx_t_11 = (__pyx_v_dend < __pyx_v_dstart);
    if (!__pyx_t_11) {
    } else {
      __pyx_t_1 = __pyx_t_11;
      goto __pyx_L20_bool_binop_done;
    }
    __pyx_t_11 = (((uint64_t)__pyx_v_dend) > ((uint64_t)__pyx_v_ad.data_len));
    __pyx_t_1 = __pyx_t_11;
    __pyx_L20_bool_binop_done:;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2192:             raise QuestDBError(
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2192, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+2193:                 QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2193, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2193, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+2194:                 'corrupt array data offsets in column kind 0x{:02X}'.format(
      __pyx_t_7 = __pyx_mstate_global->__pyx_kp_u_corrupt_array_data_offsets_in_co;
      __Pyx_INCREF(__pyx_t_7);
+2195:                     <int>kind))
      __pyx_t_8 = __Pyx_PyLong_From_int(((int)__pyx_v_kind)); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2195, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_19 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_19, (2-__pyx_t_19) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2194, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_t_19 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
        __pyx_t_19 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_4, __pyx_t_5};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_19, (3-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2192, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(2, 2192, __pyx_L1_error)
+2196:         blen = <Py_ssize_t>(dend - dstart)
    __pyx_v_blen = ((Py_ssize_t)(__pyx_v_dend - __pyx_v_dstart));
+2197:         if blen > 0:
    __pyx_t_1 = (__pyx_v_blen > 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L22;
    }
+2198:             flat = np.frombuffer(
      __pyx_t_4 = __pyx_v_np;
      __Pyx_INCREF(__pyx_t_4);
+2199:                 (<unsigned char[:blen]>(<unsigned char*>(data + dstart))),
      __pyx_t_20 = ((unsigned char *)(__pyx_v_data + __pyx_v_dstart));
      if (!__pyx_t_20) {
        PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");
        __PYX_ERR(2, 2199, __pyx_L1_error)
      }
      __pyx_t_8 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_unsigned_char); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2199, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_3 = Py_BuildValue("("  __PYX_BUILD_PY_SSIZE_T  ")", ((Py_ssize_t)__pyx_v_blen)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2199, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      #if CYTHON_COMPILING_IN_LIMITED_API
      __pyx_t_22 = PyBytes_AsString(__pyx_t_8); if (unlikely(!__pyx_t_22)) __PYX_ERR(2, 2199, __pyx_L1_error)
      #else
      __pyx_t_22 = PyBytes_AS_STRING(__pyx_t_8);
      #endif
      __pyx_t_21 = __pyx_array_new(__pyx_t_3, sizeof(unsigned char), __pyx_t_22, "c", (char *) __pyx_t_20); if (unlikely(!__pyx_t_21)) __PYX_ERR(2, 2199, __pyx_L1_error)
      __Pyx_GOTREF((PyObject *)__pyx_t_21);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+2200:                 dtype=np.float64).copy()
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2200, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_19 = 0;
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, ((PyObject *)__pyx_t_21)};
        __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2198, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_8, __pyx_t_3, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2198, __pyx_L1_error)
        __pyx_t_5 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_frombuffer, __pyx_callargs+__pyx_t_19, (2-__pyx_t_19) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF((PyObject *)__pyx_t_21); __pyx_t_21 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2198, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_t_6 = __pyx_t_5;
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_19 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_19, (1-__pyx_t_19) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2200, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_v_flat, __pyx_t_2);
      __pyx_t_2 = 0;
 2201:         else:
+2202:             flat = np.empty(0, dtype=np.float64)
    /*else*/ {
      __pyx_t_5 = __pyx_v_np;
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2202, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_19 = 0;
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_5, __pyx_mstate_global->__pyx_int_0};
        __pyx_t_3 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2202, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_6, __pyx_t_3, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2202, __pyx_L1_error)
        __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_empty, __pyx_callargs+__pyx_t_19, (2-__pyx_t_19) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2202, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_v_flat, __pyx_t_2);
      __pyx_t_2 = 0;
    }
    __pyx_L22:;
+2203:         sstart = shape_offsets[r]
    __pyx_cur_scope->__pyx_v_sstart = (__pyx_v_shape_offsets[__pyx_v_r]);
+2204:         send = shape_offsets[r + 1]
    __pyx_cur_scope->__pyx_v_send = (__pyx_v_shape_offsets[(__pyx_v_r + 1)]);
+2205:         if send < sstart or <uint64_t>send > <uint64_t>ad.shapes_len:
    __pyx_t_11 = (__pyx_cur_scope->__pyx_v_send < __pyx_cur_scope->__pyx_v_sstart);
    if (!__pyx_t_11) {
    } else {
      __pyx_t_1 = __pyx_t_11;
      goto __pyx_L24_bool_binop_done;
    }
    __pyx_t_11 = (((uint64_t)__pyx_cur_scope->__pyx_v_send) > ((uint64_t)__pyx_v_ad.shapes_len));
    __pyx_t_1 = __pyx_t_11;
    __pyx_L24_bool_binop_done:;
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2206:             raise QuestDBError(
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2206, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+2207:                 QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2207, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2207, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+2208:                 'corrupt array shape offsets in column kind 0x{:02X}'.format(
      __pyx_t_4 = __pyx_mstate_global->__pyx_kp_u_corrupt_array_shape_offsets_in_c;
      __Pyx_INCREF(__pyx_t_4);
+2209:                     <int>kind))
      __pyx_t_7 = __Pyx_PyLong_From_int(((int)__pyx_v_kind)); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2209, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_19 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_19, (2-__pyx_t_19) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_t_19 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
        __pyx_t_19 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_8, __pyx_t_5};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_19, (3-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2206, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(2, 2206, __pyx_L1_error)
+2210:         if send > sstart:
    __pyx_t_1 = (__pyx_cur_scope->__pyx_v_send > __pyx_cur_scope->__pyx_v_sstart);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L26;
    }
+2211:             _obj_chunk_set(out, r, flat.reshape(
      __pyx_t_6 = __pyx_v_flat;
      __Pyx_INCREF(__pyx_t_6);
/* … */
      __pyx_t_23 = __pyx_f_7questdb_7_client__obj_chunk_set(__pyx_v_out, __pyx_v_r, __pyx_t_2); if (unlikely(__pyx_t_23 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 2211, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2212:                 tuple(shapes[sstart + k] for k in range(send - sstart))))
static PyObject *__pyx_pf_7questdb_7_client_18_numpy_array_chunk_genexpr(PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_2_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_2_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_2_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_2_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_2_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(2, 2212, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_1___pyx_f_7questdb_7_client__numpy_array_chunk *) __pyx_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_18_numpy_array_chunk_2generator4, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[1]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_numpy_array_chunk_locals_genexp, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(2, 2212, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._numpy_array_chunk.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_7questdb_7_client_18_numpy_array_chunk_2generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(__pyx_sent_value != Py_None)) {
    if (unlikely(__pyx_sent_value)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started generator");
    __PYX_ERR(2, 2212, __pyx_L1_error)
  }
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(2, 2212, __pyx_L1_error) }
  __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2212, __pyx_L1_error)
  for (;;) {
    {
      __pyx_t_3 = __pyx_t_2(__pyx_t_1);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 2212, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyLong_From_uint32_t(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_sstart); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2212, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_cur_scope->__pyx_v_k); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2212, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 2212, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyLong_From_uint32_t((__pyx_cur_scope->__pyx_outer_scope->__pyx_v_shapes[__pyx_t_5])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2212, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(2, 2212, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
      __pyx_t_8 = NULL;
      __pyx_t_3 = __Pyx_PyLong_From_uint32_t((__pyx_cur_scope->__pyx_v_send - __pyx_cur_scope->__pyx_v_sstart)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2212, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_19 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_3};
        __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(&PyRange_Type), __pyx_callargs+__pyx_t_19, (2-__pyx_t_19) | (__pyx_t_19*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2212, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_t_3 = __pyx_pf_7questdb_7_client_18_numpy_array_chunk_genexpr(((PyObject*)__pyx_cur_scope), __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2212, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2212, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_19 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_reshape, __pyx_callargs+__pyx_t_19, (2-__pyx_t_19) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2211, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_2_genexpr {
  PyObject_HEAD
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_1___pyx_f_7questdb_7_client__numpy_array_chunk *__pyx_outer_scope;
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_k;
  PyObject *__pyx_t_0;
  PyObject *(*__pyx_t_1)(PyObject *);
};

 2213:         else:
+2214:             _obj_chunk_set(out, r, flat)
    /*else*/ {
      __pyx_t_23 = __pyx_f_7questdb_7_client__obj_chunk_set(__pyx_v_out, __pyx_v_r, __pyx_v_flat); if (unlikely(__pyx_t_23 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 2214, __pyx_L1_error)
    }
    __pyx_L26:;
    __pyx_L14_continue:;
  }
+2215:     return out
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = ((PyObject *)__pyx_v_out);
  goto __pyx_L0;
 2216: 
 2217: 
+2218: cdef object _numpy_column_chunk(
static PyObject *__pyx_f_7questdb_7_client__numpy_column_chunk(struct qwp_reader_batch const *__pyx_v_batch, size_t __pyx_v_col_idx, enum qwp_reader_column_kind __pyx_v_kind, size_t __pyx_v_row_count, PyObject *__pyx_v_np) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._numpy_column_chunk", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2219:         const qwp_reader_batch* batch,
 2220:         size_t col_idx,
 2221:         qwp_reader_column_kind kind,
 2222:         size_t row_count,
 2223:         object np):
+2224:     if kind == qwp_reader_column_kind_symbol:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_symbol);
  if (__pyx_t_1) {
/* … */
  }
+2225:         return _numpy_symbol_codes_chunk(batch, col_idx, row_count, np)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_symbol_codes_chunk(__pyx_v_batch, __pyx_v_col_idx, __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+2226:     if (kind == qwp_reader_column_kind_varchar
  switch (__pyx_v_kind) {
    case qwp_reader_column_kind_varchar:
    case qwp_reader_column_kind_binary:
/* … */
    break;
    default: break;
  }
 2227:             or kind == qwp_reader_column_kind_binary):
+2228:         return _numpy_varlen_chunk(batch, col_idx, kind, row_count, np)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_varlen_chunk(__pyx_v_batch, __pyx_v_col_idx, __pyx_v_kind, __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2228, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+2229:     if kind == qwp_reader_column_kind_geohash:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_geohash);
  if (__pyx_t_1) {
/* … */
  }
+2230:         return _numpy_geohash_chunk(batch, col_idx, row_count, np)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_geohash_chunk(__pyx_v_batch, __pyx_v_col_idx, __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+2231:     if kind == qwp_reader_column_kind_uuid:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_uuid);
  if (__pyx_t_1) {
/* … */
  }
+2232:         return _numpy_uuid_chunk(batch, col_idx, row_count, np)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_uuid_chunk(__pyx_v_batch, __pyx_v_col_idx, __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2232, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+2233:     if kind == qwp_reader_column_kind_long256:
  __pyx_t_1 = (__pyx_v_kind == qwp_reader_column_kind_long256);
  if (__pyx_t_1) {
/* … */
  }
+2234:         return _numpy_long256_chunk(batch, col_idx, row_count, np)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_long256_chunk(__pyx_v_batch, __pyx_v_col_idx, __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2234, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+2235:     if (kind == qwp_reader_column_kind_decimal64
  switch (__pyx_v_kind) {
    case qwp_reader_column_kind_decimal64:
    case qwp_reader_column_kind_decimal128:
/* … */
    break;
    default: break;
  }
+2236:             or kind == qwp_reader_column_kind_decimal128
    case qwp_reader_column_kind_decimal256:
 2237:             or kind == qwp_reader_column_kind_decimal256):
+2238:         return _numpy_decimal_chunk(batch, col_idx, row_count, np)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_decimal_chunk(__pyx_v_batch, __pyx_v_col_idx, __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+2239:     if (kind == qwp_reader_column_kind_double_array
  switch (__pyx_v_kind) {
    case qwp_reader_column_kind_double_array:
    case qwp_reader_column_kind_long_array:
/* … */
    break;
    default: break;
  }
 2240:             or kind == qwp_reader_column_kind_long_array):
+2241:         return _numpy_array_chunk(batch, col_idx, kind, row_count, np)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_array_chunk(__pyx_v_batch, __pyx_v_col_idx, __pyx_v_kind, __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+2242:     return _numpy_fixed_chunk(batch, col_idx, kind, row_count, np)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_fixed_chunk(__pyx_v_batch, __pyx_v_col_idx, __pyx_v_kind, __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 2243: 
 2244: 
+2245: cdef bint _is_hybrid_int(qwp_reader_column_kind kind):
static int __pyx_f_7questdb_7_client__is_hybrid_int(enum qwp_reader_column_kind __pyx_v_kind) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+2246:     return (kind == qwp_reader_column_kind_int
    case qwp_reader_column_kind_long:
+2247:             or kind == qwp_reader_column_kind_long
  switch (__pyx_v_kind) {
    case qwp_reader_column_kind_int:
/* … */
    case qwp_reader_column_kind_ipv4:
/* … */
    __pyx_t_1 = 1;
    break;
    default:
    __pyx_t_1 = 0;
    break;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
+2248:             or kind == qwp_reader_column_kind_ipv4
    case qwp_reader_column_kind_geohash:
 2249:             or kind == qwp_reader_column_kind_geohash)
 2250: 
 2251: 
+2252: cdef object _numpy_validity_mask(
static PyObject *__pyx_f_7questdb_7_client__numpy_validity_mask(struct qwp_reader_batch const *__pyx_v_batch, size_t __pyx_v_col_idx, size_t __pyx_v_row_count, PyObject *__pyx_v_np) {
  struct qwp_reader_column_data __pyx_v_cd;
  questdb_error *__pyx_v_err;
  CYTHON_UNUSED Py_ssize_t __pyx_v_vbytes;
  unsigned char *__pyx_v_vsrc;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF((PyObject *)__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client._numpy_validity_mask", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2253:         const qwp_reader_batch* batch,
 2254:         size_t col_idx,
 2255:         size_t row_count,
 2256:         object np):
 2257:     cdef qwp_reader_column_data cd
+2258:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2259:     cdef Py_ssize_t vbytes
 2260:     cdef unsigned char* vsrc
+2261:     _reader_check(
  __pyx_t_1 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_cd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_data); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 2261, __pyx_L1_error)
 2262:         qwp_reader_batch_column_data(batch, col_idx, &cd, &err), &err,
 2263:         'qwp_reader_batch_column_data')
+2264:     if row_count == 0 or cd.validity == NULL:
  __pyx_t_3 = (__pyx_v_row_count == 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_cd.validity == NULL);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+2265:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+2266:     vbytes = <Py_ssize_t>((row_count + 7) // 8)
  __pyx_v_vbytes = ((Py_ssize_t)((__pyx_v_row_count + 7) / 8));
+2267:     vsrc = <unsigned char*>cd.validity
  __pyx_v_vsrc = ((unsigned char *)__pyx_v_cd.validity);
+2268:     return np.unpackbits(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_7 = __pyx_v_np;
  __Pyx_INCREF(__pyx_t_7);
+2269:         np.frombuffer((<unsigned char[:vbytes]>vsrc), dtype=np.uint8),
  __pyx_t_9 = __pyx_v_np;
  __Pyx_INCREF(__pyx_t_9);
  if (!__pyx_v_vsrc) {
    PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");
    __PYX_ERR(2, 2269, __pyx_L1_error)
  }
  __pyx_t_12 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_unsigned_char); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 2269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_11 = Py_BuildValue("("  __PYX_BUILD_PY_SSIZE_T  ")", ((Py_ssize_t)__pyx_v_vbytes)); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 2269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  #if CYTHON_COMPILING_IN_LIMITED_API
  __pyx_t_13 = PyBytes_AsString(__pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 2269, __pyx_L1_error)
  #else
  __pyx_t_13 = PyBytes_AS_STRING(__pyx_t_12);
  #endif
  __pyx_t_10 = __pyx_array_new(__pyx_t_11, sizeof(unsigned char), __pyx_t_13, "c", (char *) __pyx_v_vsrc); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2269, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_10);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_mstate_global->__pyx_n_u_uint8); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 2269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_14 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, ((PyObject *)__pyx_t_10)};
    __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 2269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_12, __pyx_t_11, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2269, __pyx_L1_error)
    __pyx_t_8 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_frombuffer, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF((PyObject *)__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
  }
+2270:         count=<Py_ssize_t>row_count, bitorder='little').astype(bool)
  __pyx_t_11 = PyLong_FromSsize_t(((Py_ssize_t)__pyx_v_row_count)); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 2270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_14 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_7, __pyx_t_8};
    __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 2268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_count, __pyx_t_11, __pyx_t_12, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2268, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_bitorder, __pyx_mstate_global->__pyx_n_u_little, __pyx_t_12, __pyx_callargs+2, 1) < (0)) __PYX_ERR(2, 2268, __pyx_L1_error)
    __pyx_t_6 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_unpackbits, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
  }
  __pyx_t_5 = __pyx_t_6;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_14 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool)};
    __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 2271: 
 2272: 
+2273: cdef object _build_nullable_array(
static PyObject *__pyx_f_7questdb_7_client__build_nullable_array(PyObject *__pyx_v_values, PyObject *__pyx_v_mask, enum qwp_reader_column_kind __pyx_v_kind, PyObject *__pyx_v_pd) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._build_nullable_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2274:         values, mask, qwp_reader_column_kind kind, object pd):
+2275:     if (kind == qwp_reader_column_kind_float
  switch (__pyx_v_kind) {
    case qwp_reader_column_kind_float:
    case qwp_reader_column_kind_double:
/* … */
    break;
    default: break;
  }
 2276:             or kind == qwp_reader_column_kind_double):
+2277:         return pd.arrays.FloatingArray(values, mask)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_pd, __pyx_mstate_global->__pyx_n_u_arrays); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_values, __pyx_v_mask};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_FloatingArray, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2277, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+2278:     if kind == qwp_reader_column_kind_boolean:
  __pyx_t_5 = (__pyx_v_kind == qwp_reader_column_kind_boolean);
  if (__pyx_t_5) {
/* … */
  }
+2279:         return pd.arrays.BooleanArray(values, mask)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_pd, __pyx_mstate_global->__pyx_n_u_arrays); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_t_2;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_values, __pyx_v_mask};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_BooleanArray, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+2280:     return pd.arrays.IntegerArray(values, mask)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_pd, __pyx_mstate_global->__pyx_n_u_arrays); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_values, __pyx_v_mask};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_IntegerArray, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2280, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2281: 
 2282: 
+2283: cdef object _combine_hybrid_mask(list value_chunks, list mask_chunks, object np):
static PyObject *__pyx_f_7questdb_7_client__combine_hybrid_mask(PyObject *__pyx_v_value_chunks, PyObject *__pyx_v_mask_chunks, PyObject *__pyx_v_np) {
  size_t __pyx_v_n;
  size_t __pyx_v_i;
  int __pyx_v_any_null;
  PyObject *__pyx_v_parts = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client._combine_hybrid_mask", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_parts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2284:     cdef size_t n = <size_t>len(mask_chunks)
  if (unlikely(__pyx_v_mask_chunks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 2284, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_mask_chunks); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(2, 2284, __pyx_L1_error)
  __pyx_v_n = ((size_t)__pyx_t_1);
 2285:     cdef size_t i
+2286:     cdef bint any_null = False
  __pyx_v_any_null = 0;
+2287:     for i in range(n):
  __pyx_t_2 = __pyx_v_n;
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i = __pyx_t_4;
+2288:         if mask_chunks[i] is not None:
    if (unlikely(__pyx_v_mask_chunks == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2288, __pyx_L1_error)
    }
    __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_mask_chunks, __pyx_v_i, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = (__pyx_t_5 != Py_None);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_6) {
/* … */
    }
  }
  __pyx_L4_break:;
+2289:             any_null = True
      __pyx_v_any_null = 1;
+2290:             break
      goto __pyx_L4_break;
+2291:     if not any_null:
  __pyx_t_6 = (!__pyx_v_any_null);
  if (__pyx_t_6) {
/* … */
  }
+2292:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+2293:     parts = []
  __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_v_parts = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
+2294:     for i in range(n):
  __pyx_t_2 = __pyx_v_n;
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i = __pyx_t_4;
+2295:         if mask_chunks[i] is None:
    if (unlikely(__pyx_v_mask_chunks == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2295, __pyx_L1_error)
    }
    __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_mask_chunks, __pyx_v_i, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = (__pyx_t_5 == Py_None);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_6) {
/* … */
      goto __pyx_L9;
    }
+2296:             parts.append(np.zeros(len(value_chunks[i]), dtype=bool))
      __pyx_t_7 = __pyx_v_np;
      __Pyx_INCREF(__pyx_t_7);
      if (unlikely(__pyx_v_value_chunks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 2296, __pyx_L1_error)
      }
      __pyx_t_8 = __Pyx_GetItemInt_List(__pyx_v_value_chunks, __pyx_v_i, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2296, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_1 = PyObject_Length(__pyx_t_8); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(2, 2296, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyLong_FromSsize_t(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2296, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_t_8};
        __pyx_t_10 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2296, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool), __pyx_t_10, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2296, __pyx_L1_error)
        __pyx_t_5 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_zeros, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2296, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_parts, __pyx_t_5); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 2296, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 2297:         else:
+2298:             parts.append(mask_chunks[i])
    /*else*/ {
      if (unlikely(__pyx_v_mask_chunks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 2298, __pyx_L1_error)
      }
      __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_mask_chunks, __pyx_v_i, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2298, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_parts, __pyx_t_5); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 2298, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_L9:;
  }
+2299:     if len(parts) == 1:
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_parts); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(2, 2299, __pyx_L1_error)
  __pyx_t_6 = (__pyx_t_1 == 1);
  if (__pyx_t_6) {
/* … */
  }
+2300:         return parts[0]
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_parts, 0, long, 1, __Pyx_PyLong_From_long, 1, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;
+2301:     return np.concatenate(parts)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_10 = __pyx_v_np;
  __Pyx_INCREF(__pyx_t_10);
  __pyx_t_2 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_parts};
    __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_concatenate, __pyx_callargs+__pyx_t_2, (2-__pyx_t_2) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 2302: 
 2303: 
+2304: cdef list _numpy_pinned_name_bytes(tuple pinned):
static PyObject *__pyx_f_7questdb_7_client__numpy_pinned_name_bytes(PyObject *__pyx_v_pinned) {
  PyObject *__pyx_8genexpr6__pyx_v_name = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client._numpy_pinned_name_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2305:     """The pinned column names as UTF-8, encoded once per result.
 2306: 
 2307:     The per-batch check compares them against the borrowed name buffer
 2308:     the reader hands back, so no `PyUnicode` is built per column per
 2309:     batch.
 2310:     """
+2311:     return [(<str>name).encode('utf-8') for name in <list>pinned[0]]
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2311, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_v_pinned == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2311, __pyx_L5_error)
    }
    __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_pinned, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2311, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (unlikely(__pyx_t_2 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(2, 2311, __pyx_L5_error)
    }
    __pyx_t_3 = ((PyObject*)__pyx_t_2); __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    for (;;) {
      {
        Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 2311, __pyx_L5_error)
        #endif
        if (__pyx_t_4 >= __pyx_temp) break;
      }
      __pyx_t_2 = __Pyx_PyList_GetItemRefFast(__pyx_t_3, __pyx_t_4, __Pyx_ReferenceSharing_OwnStrongReference);
      ++__pyx_t_4;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2311, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF_SET(__pyx_8genexpr6__pyx_v_name, __pyx_t_2);
      __pyx_t_2 = 0;
      if (unlikely(__pyx_8genexpr6__pyx_v_name == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "encode");
        __PYX_ERR(2, 2311, __pyx_L5_error)
      }
      __pyx_t_2 = PyUnicode_AsUTF8String(((PyObject*)__pyx_8genexpr6__pyx_v_name)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2311, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(2, 2311, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_name); __pyx_8genexpr6__pyx_v_name = 0;
    goto __pyx_L9_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_8genexpr6__pyx_v_name); __pyx_8genexpr6__pyx_v_name = 0;
    goto __pyx_L1_error;
    __pyx_L9_exit_scope:;
  } /* exit inner scope */
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2312: 
 2313: 
+2314: cdef _numpy_check_meta_pinned(
static PyObject *__pyx_f_7questdb_7_client__numpy_check_meta_pinned(PyObject *__pyx_v_pinned, PyObject *__pyx_v_pinned_names, struct qwp_reader_batch const *__pyx_v_batch) {
  PyObject *__pyx_v_pinned_kinds = 0;
  PyObject *__pyx_v_pinned_scales = 0;
  PyObject *__pyx_v_pinned_precision = 0;
  size_t __pyx_v_n_cols;
  size_t __pyx_v_col_idx;
  enum qwp_reader_column_kind __pyx_v_kind;
  questdb_error *__pyx_v_err;
  struct qwp_reader_column_data __pyx_v_cd_meta;
  PyObject *__pyx_v_want = 0;
  char const *__pyx_v_name_buf;
  size_t __pyx_v_name_len;
  PyObject *__pyx_v_want_name = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._numpy_check_meta_pinned", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pinned_kinds);
  __Pyx_XDECREF(__pyx_v_pinned_scales);
  __Pyx_XDECREF(__pyx_v_pinned_precision);
  __Pyx_XDECREF(__pyx_v_want);
  __Pyx_XDECREF(__pyx_v_want_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2315:         tuple pinned, list pinned_names, const qwp_reader_batch* batch):
 2316:     """Refuse a batch whose schema disagrees with the first one's.
 2317: 
 2318:     The NumPy path reads the column names, kinds, decimal scales and
 2319:     geohash precisions once and decodes every later batch against them,
 2320:     and the round-trip claim it hands back names them too. A batch that
 2321:     disagrees would be decoded with the wrong dtype and described by a
 2322:     claim that does not match its own values, so it stops here instead.
 2323: 
 2324:     The count, the names, the kinds and the two numbers the decoders
 2325:     read per batch are all compared. The names are compared as raw
 2326:     bytes against the buffer the reader borrows out, because a
 2327:     `PyUnicode` per column per batch is the cost this path had removed
 2328:     -- and a rename is the one alteration that moves neither the count
 2329:     nor the kinds, which is exactly what the reference client checks
 2330:     first.
 2331:     """
+2332:     cdef list pinned_kinds = <list>pinned[1]
  if (unlikely(__pyx_v_pinned == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 2332, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_pinned, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_pinned_kinds = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+2333:     cdef list pinned_scales = <list>pinned[2]
  if (unlikely(__pyx_v_pinned == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 2333, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_pinned, 2, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_pinned_scales = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2334:     cdef list pinned_precision = <list>pinned[3]
  if (unlikely(__pyx_v_pinned == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 2334, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_pinned, 3, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2334, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_pinned_precision = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+2335:     cdef size_t n_cols = qwp_reader_batch_column_count(batch)
  __pyx_v_n_cols = qwp_reader_batch_column_count(__pyx_v_batch);
 2336:     cdef size_t col_idx
+2337:     cdef qwp_reader_column_kind kind = qwp_reader_column_kind_unknown
  __pyx_v_kind = qwp_reader_column_kind_unknown;
+2338:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2339:     cdef qwp_reader_column_data cd_meta
 2340:     cdef object want
+2341:     cdef const char* name_buf = NULL
  __pyx_v_name_buf = NULL;
+2342:     cdef size_t name_len = 0
  __pyx_v_name_len = 0;
 2343:     cdef bytes want_name
+2344:     if n_cols != <size_t>len(pinned_kinds):
  if (unlikely(__pyx_v_pinned_kinds == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 2344, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyList_GET_SIZE(__pyx_v_pinned_kinds); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 2344, __pyx_L1_error)
  __pyx_t_4 = (__pyx_v_n_cols != ((size_t)__pyx_t_3));
  if (__pyx_t_4) {
/* … */
  }
+2345:         _numpy_meta_drift()
    __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_meta_drift(); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2346:     for col_idx in range(n_cols):
  __pyx_t_5 = __pyx_v_n_cols;
  __pyx_t_6 = __pyx_t_5;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v_col_idx = __pyx_t_7;
+2347:         _reader_check(
    __pyx_t_8 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_name(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_name_buf), (&__pyx_v_name_len), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_name); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(2, 2347, __pyx_L1_error)
 2348:             qwp_reader_batch_column_name(
 2349:                 batch, col_idx, &name_buf, &name_len, &err),
 2350:             &err, 'qwp_reader_batch_column_name')
+2351:         want_name = <bytes>pinned_names[col_idx]
    if (unlikely(__pyx_v_pinned_names == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2351, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_pinned_names, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF_SET(__pyx_v_want_name, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;
+2352:         if (name_len != <size_t>len(want_name)
    if (unlikely(__pyx_v_want_name == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(2, 2352, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_PyBytes_GET_SIZE(__pyx_v_want_name); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 2352, __pyx_L1_error)
    __pyx_t_9 = (__pyx_v_name_len != ((size_t)__pyx_t_3));
    if (!__pyx_t_9) {
    } else {
      __pyx_t_4 = __pyx_t_9;
      goto __pyx_L7_bool_binop_done;
    }
/* … */
    if (__pyx_t_4) {
/* … */
    }
+2353:                 or memcmp(name_buf, <const char*>want_name,
    if (unlikely(__pyx_v_want_name == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
      __PYX_ERR(2, 2353, __pyx_L1_error)
    }
    __pyx_t_10 = __Pyx_PyBytes_AsString(__pyx_v_want_name); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) __PYX_ERR(2, 2353, __pyx_L1_error)
+2354:                           name_len) != 0):
    __pyx_t_9 = (memcmp(__pyx_v_name_buf, ((char const *)__pyx_t_10), __pyx_v_name_len) != 0);
    __pyx_t_4 = __pyx_t_9;
    __pyx_L7_bool_binop_done:;
+2355:             _numpy_meta_drift()
      __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_meta_drift(); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2355, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2356:         _reader_check(
    __pyx_t_8 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_kind(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_kind), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_kind); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(2, 2356, __pyx_L1_error)
 2357:             qwp_reader_batch_column_kind(batch, col_idx, &kind, &err),
 2358:             &err, 'qwp_reader_batch_column_kind')
+2359:         if <int>kind != <int>(<object>pinned_kinds[col_idx]):
    if (unlikely(__pyx_v_pinned_kinds == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2359, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_pinned_kinds, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 2359, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = (((int)__pyx_v_kind) != ((int)__pyx_t_8));
    if (__pyx_t_4) {
/* … */
    }
+2360:             _numpy_meta_drift()
      __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_meta_drift(); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2360, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2361:         if kind == qwp_reader_column_kind_geohash:
    switch (__pyx_v_kind) {
      case qwp_reader_column_kind_geohash:
/* … */
      break;
      case qwp_reader_column_kind_decimal64:
+2362:             want = pinned_precision[col_idx]
      if (unlikely(__pyx_v_pinned_precision == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 2362, __pyx_L1_error)
      }
      __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_pinned_precision, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2362, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_want, __pyx_t_1);
      __pyx_t_1 = 0;
+2363:         elif (kind == qwp_reader_column_kind_decimal64
      case qwp_reader_column_kind_decimal128:
/* … */
      break;
      default:
+2364:                 or kind == qwp_reader_column_kind_decimal128
      case qwp_reader_column_kind_decimal256:
 2365:                 or kind == qwp_reader_column_kind_decimal256):
+2366:             want = pinned_scales[col_idx]
      if (unlikely(__pyx_v_pinned_scales == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 2366, __pyx_L1_error)
      }
      __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_pinned_scales, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2366, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_want, __pyx_t_1);
      __pyx_t_1 = 0;
 2367:         else:
+2368:             continue
      goto __pyx_L4_continue;
      break;
    }
+2369:         if qwp_reader_batch_column_data(batch, col_idx, &cd_meta, &err):
    __pyx_t_4 = qwp_reader_batch_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_cd_meta), (&__pyx_v_err));
    if (__pyx_t_4) {
/* … */
      goto __pyx_L10;
    }
+2370:             if kind == qwp_reader_column_kind_geohash:
      __pyx_t_4 = (__pyx_v_kind == qwp_reader_column_kind_geohash);
      if (__pyx_t_4) {
/* … */
        goto __pyx_L11;
      }
+2371:                 if want is not None and cd_meta.geohash_precision_bits != want:
        __pyx_t_9 = (__pyx_v_want != Py_None);
        if (__pyx_t_9) {
        } else {
          __pyx_t_4 = __pyx_t_9;
          goto __pyx_L13_bool_binop_done;
        }
        __pyx_t_1 = __Pyx_PyLong_From_uint8_t(__pyx_v_cd_meta.geohash_precision_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2371, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_v_want, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2371, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(2, 2371, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_4 = __pyx_t_9;
        __pyx_L13_bool_binop_done:;
        if (__pyx_t_4) {
/* … */
        }
+2372:                     _numpy_meta_drift()
          __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_meta_drift(); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2372, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2373:             elif want is not None and cd_meta.decimal_scale != want:
      __pyx_t_9 = (__pyx_v_want != Py_None);
      if (__pyx_t_9) {
      } else {
        __pyx_t_4 = __pyx_t_9;
        goto __pyx_L15_bool_binop_done;
      }
      __pyx_t_2 = __Pyx_PyLong_From_int8_t(__pyx_v_cd_meta.decimal_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_v_want, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2373, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(2, 2373, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_4 = __pyx_t_9;
      __pyx_L15_bool_binop_done:;
      if (__pyx_t_4) {
/* … */
      }
      __pyx_L11:;
+2374:                 _numpy_meta_drift()
        __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_meta_drift(); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2374, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2375:         elif err != NULL:
    __pyx_t_4 = (__pyx_v_err != NULL);
    if (__pyx_t_4) {
/* … */
    }
    __pyx_L10:;
    __pyx_L4_continue:;
  }
+2376:             questdb_error_free(err)
      questdb_error_free(__pyx_v_err);
+2377:             err = NULL
      __pyx_v_err = NULL;
 2378: 
 2379: 
+2380: def _debug_numpy_pinned_meta(_NumpyBatchIter it):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_70_debug_numpy_pinned_meta(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_69_debug_numpy_pinned_meta, "The schema a NumPy-backed iterator pinned from its first batch.\n\n    Not part of the public API. The drift check compares a later batch\n    against this, and a result whose schema really changes mid-stream\n    cannot be arranged from a test, so the pin is what a test perturbs\n    instead. Comparing a good batch against a doctored pin exercises\n    the same comparison as a doctored batch against a good pin.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_70_debug_numpy_pinned_meta = {"_debug_numpy_pinned_meta", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_70_debug_numpy_pinned_meta, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_69_debug_numpy_pinned_meta};
static PyObject *__pyx_pw_7questdb_7_client_70_debug_numpy_pinned_meta(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_7questdb_7_client__NumpyBatchIter *__pyx_v_it = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_numpy_pinned_meta (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_it,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 2380, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 2380, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_numpy_pinned_meta", 0) < (0)) __PYX_ERR(2, 2380, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_numpy_pinned_meta", 1, 1, 1, i); __PYX_ERR(2, 2380, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 2380, __pyx_L3_error)
    }
    __pyx_v_it = ((struct __pyx_obj_7questdb_7_client__NumpyBatchIter *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_numpy_pinned_meta", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 2380, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_numpy_pinned_meta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_it), __pyx_mstate_global->__pyx_ptype_7questdb_7_client__NumpyBatchIter, 1, "it", 0))) __PYX_ERR(2, 2380, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_69_debug_numpy_pinned_meta(__pyx_self, __pyx_v_it);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_69_debug_numpy_pinned_meta(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7questdb_7_client__NumpyBatchIter *__pyx_v_it) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._debug_numpy_pinned_meta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_70_debug_numpy_pinned_meta, 0, __pyx_mstate_global->__pyx_n_u_debug_numpy_pinned_meta, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[81])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 2380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_numpy_pinned_meta, __pyx_t_18) < (0)) __PYX_ERR(2, 2380, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2381:     """The schema a NumPy-backed iterator pinned from its first batch.
 2382: 
 2383:     Not part of the public API. The drift check compares a later batch
 2384:     against this, and a result whose schema really changes mid-stream
 2385:     cannot be arranged from a test, so the pin is what a test perturbs
 2386:     instead. Comparing a good batch against a doctored pin exercises
 2387:     the same comparison as a doctored batch against a good pin.
 2388:     """
+2389:     return (it.pinned_meta, list(it.pinned_names_b))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PySequence_List(__pyx_v_it->pinned_names_b); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_it->pinned_meta);
  __Pyx_GIVEREF(__pyx_v_it->pinned_meta);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_it->pinned_meta) != (0)) __PYX_ERR(2, 2389, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1) != (0)) __PYX_ERR(2, 2389, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 2390: 
 2391: 
+2392: def _debug_numpy_force_pin(_NumpyBatchIter it, tuple pinned_meta,
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_72_debug_numpy_force_pin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_71_debug_numpy_force_pin, "Seed an iterator's pinned schema so its *first* batch is checked\n    against it rather than pinning one of its own.\n\n    Not part of the public API.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_72_debug_numpy_force_pin = {"_debug_numpy_force_pin", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_72_debug_numpy_force_pin, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_71_debug_numpy_force_pin};
static PyObject *__pyx_pw_7questdb_7_client_72_debug_numpy_force_pin(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_7questdb_7_client__NumpyBatchIter *__pyx_v_it = 0;
  PyObject *__pyx_v_pinned_meta = 0;
  PyObject *__pyx_v_pinned_names_b = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_numpy_force_pin (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_it,&__pyx_mstate_global->__pyx_n_u_pinned_meta,&__pyx_mstate_global->__pyx_n_u_pinned_names_b,0};
  PyObject* values[3] = {0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 2392, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 2392, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 2392, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 2392, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_numpy_force_pin", 0) < (0)) __PYX_ERR(2, 2392, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_numpy_force_pin", 1, 3, 3, i); __PYX_ERR(2, 2392, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 2392, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 2392, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 2392, __pyx_L3_error)
    }
    __pyx_v_it = ((struct __pyx_obj_7questdb_7_client__NumpyBatchIter *)values[0]);
    __pyx_v_pinned_meta = ((PyObject*)values[1]);
    __pyx_v_pinned_names_b = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_numpy_force_pin", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 2392, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_numpy_force_pin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_it), __pyx_mstate_global->__pyx_ptype_7questdb_7_client__NumpyBatchIter, 1, "it", 0))) __PYX_ERR(2, 2392, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pinned_meta), (&PyTuple_Type), 1, "pinned_meta", 1))) __PYX_ERR(2, 2392, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pinned_names_b), (&PyList_Type), 1, "pinned_names_b", 1))) __PYX_ERR(2, 2393, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_71_debug_numpy_force_pin(__pyx_self, __pyx_v_it, __pyx_v_pinned_meta, __pyx_v_pinned_names_b);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_71_debug_numpy_force_pin(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7questdb_7_client__NumpyBatchIter *__pyx_v_it, PyObject *__pyx_v_pinned_meta, PyObject *__pyx_v_pinned_names_b) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._debug_numpy_force_pin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_72_debug_numpy_force_pin, 0, __pyx_mstate_global->__pyx_n_u_debug_numpy_force_pin, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[82])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 2392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_numpy_force_pin, __pyx_t_18) < (0)) __PYX_ERR(2, 2392, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2393:                            list pinned_names_b):
 2394:     """Seed an iterator's pinned schema so its *first* batch is checked
 2395:     against it rather than pinning one of its own.
 2396: 
 2397:     Not part of the public API.
 2398:     """
+2399:     it.pinned_meta = pinned_meta
  __Pyx_INCREF(__pyx_v_pinned_meta);
  __Pyx_GIVEREF(__pyx_v_pinned_meta);
  __Pyx_GOTREF(__pyx_v_it->pinned_meta);
  __Pyx_DECREF(__pyx_v_it->pinned_meta);
  __pyx_v_it->pinned_meta = __pyx_v_pinned_meta;
+2400:     it.pinned_names_b = pinned_names_b
  __Pyx_INCREF(__pyx_v_pinned_names_b);
  __Pyx_GIVEREF(__pyx_v_pinned_names_b);
  __Pyx_GOTREF(__pyx_v_it->pinned_names_b);
  __Pyx_DECREF(__pyx_v_it->pinned_names_b);
  __pyx_v_it->pinned_names_b = __pyx_v_pinned_names_b;
+2401:     (it.col_names, it.col_kinds, it.col_scales,
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(2, 2401, __pyx_L1_error)
  if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(2, 2401, __pyx_L1_error)
  if (!(likely(PyList_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_3))) __PYX_ERR(2, 2401, __pyx_L1_error)
  if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_4))) __PYX_ERR(2, 2401, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 2401, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_it->col_names);
  __Pyx_DECREF(__pyx_v_it->col_names);
  __pyx_v_it->col_names = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_it->col_kinds);
  __Pyx_DECREF(__pyx_v_it->col_kinds);
  __pyx_v_it->col_kinds = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_it->col_scales);
  __Pyx_DECREF(__pyx_v_it->col_scales);
  __pyx_v_it->col_scales = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
+2402:      it.col_precision, it.has_symbol) = pinned_meta
  if (likely(__pyx_v_pinned_meta != Py_None)) {
    PyObject* sequence = __pyx_v_pinned_meta;
    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
    if (unlikely(size != 5)) {
      if (size > 5) __Pyx_RaiseTooManyValuesError(5);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(2, 2401, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 3);
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_5 = PyTuple_GET_ITEM(sequence, 4);
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[5] = {&__pyx_t_1,&__pyx_t_2,&__pyx_t_3,&__pyx_t_4,&__pyx_t_5};
      for (i=0; i < 5; i++) {
        PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(2, 2401, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 2401, __pyx_L1_error)
  }
/* … */
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_it->col_precision);
  __Pyx_DECREF(__pyx_v_it->col_precision);
  __pyx_v_it->col_precision = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_v_it->has_symbol = __pyx_t_6;
+2403:     it.claim = _numpy_roundtrip_claim(
  __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_roundtrip_claim(((PyObject*)__pyx_t_5), ((PyObject*)__pyx_t_4), ((PyObject*)__pyx_t_3), ((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_it->claim);
  __Pyx_DECREF(__pyx_v_it->claim);
  __pyx_v_it->claim = __pyx_t_1;
  __pyx_t_1 = 0;
+2404:         it.col_names, it.col_kinds, it.col_scales, it.col_precision)
  __pyx_t_5 = __pyx_v_it->col_names;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_4 = __pyx_v_it->col_kinds;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_3 = __pyx_v_it->col_scales;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_v_it->col_precision;
  __Pyx_INCREF(__pyx_t_2);
+2405:     it.first = False
  __pyx_v_it->first = 0;
 2406: 
 2407: 
+2408: cdef _numpy_meta_drift():
static PyObject *__pyx_f_7questdb_7_client__numpy_meta_drift(void) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._numpy_meta_drift", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2409:     # `SchemaDrift` is the code the header gives a mid-stream schema
 2410:     # change, and the one `to_arrow()` and `iter_polars()` already raise
 2411:     # for the same event through the Arrow reader. `ServerSchemaMismatch`
 2412:     # is a server-reported ingest status and means something else.
+2413:     raise QuestDBError(
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+2414:         QuestDBErrorCode.SchemaDrift,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_SchemaDrift); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_The_result_schema_changed_betwee};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2413, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(2, 2413, __pyx_L1_error)
 2415:         'The result schema changed between batches: this reader '
 2416:         'decodes every batch against the first one\'s columns, so a '
 2417:         'later batch that disagrees cannot be read.')
 2418: 
 2419: 
+2420: cdef tuple _numpy_extract_meta(const qwp_reader_batch* batch):
static PyObject *__pyx_f_7questdb_7_client__numpy_extract_meta(struct qwp_reader_batch const *__pyx_v_batch) {
  size_t __pyx_v_n_cols;
  size_t __pyx_v_col_idx;
  enum qwp_reader_column_kind __pyx_v_kind;
  char const *__pyx_v_name_buf;
  size_t __pyx_v_name_len;
  questdb_error *__pyx_v_err;
  struct qwp_reader_column_data __pyx_v_cd_meta;
  int __pyx_v_has_symbol;
  PyObject *__pyx_v_col_names = NULL;
  PyObject *__pyx_v_col_kinds = NULL;
  PyObject *__pyx_v_col_scales = NULL;
  PyObject *__pyx_v_col_precision = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._numpy_extract_meta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_col_names);
  __Pyx_XDECREF(__pyx_v_col_kinds);
  __Pyx_XDECREF(__pyx_v_col_scales);
  __Pyx_XDECREF(__pyx_v_col_precision);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2421:     cdef size_t n_cols = qwp_reader_batch_column_count(batch)
  __pyx_v_n_cols = qwp_reader_batch_column_count(__pyx_v_batch);
 2422:     cdef size_t col_idx
+2423:     cdef qwp_reader_column_kind kind = qwp_reader_column_kind_unknown
  __pyx_v_kind = qwp_reader_column_kind_unknown;
+2424:     cdef const char* name_buf = NULL
  __pyx_v_name_buf = NULL;
+2425:     cdef size_t name_len = 0
  __pyx_v_name_len = 0;
+2426:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2427:     cdef qwp_reader_column_data cd_meta
+2428:     cdef bint has_symbol = False
  __pyx_v_has_symbol = 0;
+2429:     col_names = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_names = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2430:     col_kinds = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2430, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_kinds = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2431:     col_scales = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_scales = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2432:     col_precision = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2432, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_precision = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2433:     for col_idx in range(n_cols):
  __pyx_t_2 = __pyx_v_n_cols;
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_col_idx = __pyx_t_4;
+2434:         _reader_check(
    __pyx_t_5 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_name(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_name_buf), (&__pyx_v_name_len), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_name); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 2434, __pyx_L1_error)
 2435:             qwp_reader_batch_column_name(
 2436:                 batch, col_idx, &name_buf, &name_len, &err),
 2437:             &err, 'qwp_reader_batch_column_name')
+2438:         col_names.append(
    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_col_names, __pyx_t_1); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 2438, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2439:             PyUnicode_FromStringAndSize(name_buf, <Py_ssize_t>name_len))
    __pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_name_buf, ((Py_ssize_t)__pyx_v_name_len)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2439, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
+2440:         _reader_check(
    __pyx_t_5 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_kind(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_kind), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_kind); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 2440, __pyx_L1_error)
 2441:             qwp_reader_batch_column_kind(batch, col_idx, &kind, &err),
 2442:             &err, 'qwp_reader_batch_column_kind')
+2443:         col_kinds.append(<int>kind)
    __pyx_t_1 = __Pyx_PyLong_From_int(((int)__pyx_v_kind)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2443, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_col_kinds, __pyx_t_1); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 2443, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2444:         col_scales.append(None)
    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_col_scales, Py_None); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 2444, __pyx_L1_error)
+2445:         col_precision.append(None)
    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_col_precision, Py_None); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 2445, __pyx_L1_error)
+2446:         if kind == qwp_reader_column_kind_symbol:
    switch (__pyx_v_kind) {
      case qwp_reader_column_kind_symbol:
/* … */
      break;
      case qwp_reader_column_kind_geohash:
+2447:             has_symbol = True
      __pyx_v_has_symbol = 1;
+2448:         elif (kind == qwp_reader_column_kind_geohash
      case qwp_reader_column_kind_decimal64:
/* … */
      break;
      default: break;
    }
  }
+2449:                 or kind == qwp_reader_column_kind_decimal64
      case qwp_reader_column_kind_decimal128:
+2450:                 or kind == qwp_reader_column_kind_decimal128
      case qwp_reader_column_kind_decimal256:
 2451:                 or kind == qwp_reader_column_kind_decimal256):
+2452:             if qwp_reader_batch_column_data(batch, col_idx, &cd_meta, &err):
      __pyx_t_7 = qwp_reader_batch_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_cd_meta), (&__pyx_v_err));
      if (__pyx_t_7) {
/* … */
        goto __pyx_L5;
      }
+2453:                 if kind == qwp_reader_column_kind_geohash:
        __pyx_t_7 = (__pyx_v_kind == qwp_reader_column_kind_geohash);
        if (__pyx_t_7) {
/* … */
          goto __pyx_L6;
        }
+2454:                     col_precision[col_idx] = cd_meta.geohash_precision_bits
          __pyx_t_1 = __Pyx_PyLong_From_uint8_t(__pyx_v_cd_meta.geohash_precision_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2454, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely((__Pyx_SetItemInt(__pyx_v_col_precision, __pyx_v_col_idx, __pyx_t_1, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(2, 2454, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2455:                 else:
+2456:                     col_scales[col_idx] = cd_meta.decimal_scale
        /*else*/ {
          __pyx_t_1 = __Pyx_PyLong_From_int8_t(__pyx_v_cd_meta.decimal_scale); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2456, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely((__Pyx_SetItemInt(__pyx_v_col_scales, __pyx_v_col_idx, __pyx_t_1, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference) < 0))) __PYX_ERR(2, 2456, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __pyx_L6:;
+2457:             elif err != NULL:
      __pyx_t_7 = (__pyx_v_err != NULL);
      if (__pyx_t_7) {
/* … */
      }
      __pyx_L5:;
+2458:                 questdb_error_free(err)
        questdb_error_free(__pyx_v_err);
+2459:                 err = NULL
        __pyx_v_err = NULL;
+2460:     return (col_names, col_kinds, col_scales, col_precision, has_symbol)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_has_symbol); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = PyTuple_New(5); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_col_names);
  __Pyx_GIVEREF(__pyx_v_col_names);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_col_names) != (0)) __PYX_ERR(2, 2460, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_col_kinds);
  __Pyx_GIVEREF(__pyx_v_col_kinds);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_col_kinds) != (0)) __PYX_ERR(2, 2460, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_col_scales);
  __Pyx_GIVEREF(__pyx_v_col_scales);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_col_scales) != (0)) __PYX_ERR(2, 2460, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_col_precision);
  __Pyx_GIVEREF(__pyx_v_col_precision);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_col_precision) != (0)) __PYX_ERR(2, 2460, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_t_1) != (0)) __PYX_ERR(2, 2460, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_r = ((PyObject*)__pyx_t_8);
  __pyx_t_8 = 0;
  goto __pyx_L0;
 2461: 
 2462: 
+2463: cdef object _FROM_CODES_HAS_VALIDATE = None
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__FROM_CODES_HAS_VALIDATE);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__FROM_CODES_HAS_VALIDATE, Py_None);
  __Pyx_GIVEREF(Py_None);
 2464: 
 2465: 
+2466: cdef object _symbol_from_codes(object pd, object arr, object dtype):
static PyObject *__pyx_f_7questdb_7_client__symbol_from_codes(PyObject *__pyx_v_pd, PyObject *__pyx_v_arr, PyObject *__pyx_v_dtype) {
  Py_ssize_t __pyx_v_n_cats;
  PyObject *__pyx_v_inspect = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._symbol_from_codes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_inspect);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2467:     # Bounds-check the wire codes against the dict once (a vectorised C-level
 2468:     # reduction), then skip pandas' O(rows) Python re-validation. `validate=`
 2469:     # exists since pandas 2.1; older pandas keeps the checked path. `dtype=`
 2470:     # reuses one cached category Index across columns and batches (vs
 2471:     # `categories=`, which rebuilds it every call).
+2472:     cdef Py_ssize_t n_cats = len(dtype.categories)
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_mstate_global->__pyx_n_u_categories); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(2, 2472, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_n_cats = __pyx_t_2;
+2473:     if arr.size and <Py_ssize_t>int(arr.max()) >= n_cats:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_arr, __pyx_mstate_global->__pyx_n_u_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(2, 2473, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = __pyx_v_arr;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_6 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_max, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2473, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_5 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(2, 2473, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_4 = (((Py_ssize_t)__pyx_t_2) >= __pyx_v_n_cats);
  __pyx_t_3 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+2474:         raise QuestDBError(
    __pyx_t_1 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2474, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
+2475:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2475, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2475, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_1);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_9, __pyx_mstate_global->__pyx_kp_u_corrupt_symbol_codes_code_out_of};
      __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2474, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(2, 2474, __pyx_L1_error)
 2476:             'corrupt symbol codes: code out of dictionary range')
 2477:     global _FROM_CODES_HAS_VALIDATE
+2478:     if _FROM_CODES_HAS_VALIDATE is None:
  __pyx_t_3 = (__pyx_v_7questdb_7_client__FROM_CODES_HAS_VALIDATE == Py_None);
  if (__pyx_t_3) {
/* … */
  }
+2479:         import inspect
    __pyx_t_10 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_inspect, 0, 0, NULL, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2479, __pyx_L1_error)
    __pyx_t_5 = __pyx_t_10;
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_v_inspect = __pyx_t_5;
    __pyx_t_5 = 0;
 2480:         _FROM_CODES_HAS_VALIDATE = (
+2481:             'validate' in inspect.signature(
    __pyx_t_7 = __pyx_v_inspect;
    __Pyx_INCREF(__pyx_t_7);
/* … */
    __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_v_7questdb_7_client__FROM_CODES_HAS_VALIDATE);
    __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__FROM_CODES_HAS_VALIDATE, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
+2482:                 pd.Categorical.from_codes).parameters)
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_pd, __pyx_mstate_global->__pyx_n_u_Categorical); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2482, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_from_codes); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2482, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_1};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_signature, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2481, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_parameters); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2482, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_mstate_global->__pyx_n_u_validate, __pyx_t_1, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 2481, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2483:     if _FROM_CODES_HAS_VALIDATE:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_7questdb_7_client__FROM_CODES_HAS_VALIDATE); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 2483, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
  }
+2484:         return pd.Categorical.from_codes(arr, dtype=dtype, validate=False)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_pd, __pyx_mstate_global->__pyx_n_u_Categorical); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = __pyx_t_7;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_5, __pyx_v_arr};
      __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2484, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_v_dtype, __pyx_t_9, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2484, __pyx_L1_error)
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_validate, Py_False, __pyx_t_9, __pyx_callargs+2, 1) < (0)) __PYX_ERR(2, 2484, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_from_codes, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2484, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+2485:     return pd.Categorical.from_codes(arr, dtype=dtype)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_pd, __pyx_mstate_global->__pyx_n_u_Categorical); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2485, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = __pyx_t_9;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_6 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_v_arr};
    __pyx_t_5 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2485, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_v_dtype, __pyx_t_5, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2485, __pyx_L1_error)
    __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_from_codes, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2485, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2486: 
 2487: 
+2488: cdef object _numpy_roundtrip_claim(
static PyObject *__pyx_f_7questdb_7_client__numpy_roundtrip_claim(PyObject *__pyx_v_col_names, PyObject *__pyx_v_col_kinds, PyObject *__pyx_v_col_scales, PyObject *__pyx_v_col_precision) {
  size_t __pyx_v_col_idx;
  size_t __pyx_v_n_cols;
  PyObject *__pyx_v_columns_meta = 0;
  PyObject *__pyx_v_entry = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client._numpy_roundtrip_claim", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_columns_meta);
  __Pyx_XDECREF(__pyx_v_entry);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2489:         list col_names, list col_kinds, list col_scales, list col_precision):
 2490:     """The ``df.attrs['questdb']`` claim for a native (no pyarrow) result.
 2491: 
 2492:     Built from the schema the first batch reported, which the whole
 2493:     result shares, so a streaming read builds it once and hands the same
 2494:     claim to every batch. That is sound for the same reason pandas can
 2495:     share it between copies of one frame: the claim declines to be
 2496:     copied and cannot be edited.
 2497:     """
 2498:     cdef size_t col_idx
+2499:     cdef size_t n_cols = <size_t>len(col_names)
  if (unlikely(__pyx_v_col_names == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 2499, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_col_names); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(2, 2499, __pyx_L1_error)
  __pyx_v_n_cols = ((size_t)__pyx_t_1);
+2500:     cdef dict columns_meta = {}
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_columns_meta = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 2501:     cdef dict entry
+2502:     for col_idx in range(n_cols):
  __pyx_t_3 = __pyx_v_n_cols;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_col_idx = __pyx_t_5;
+2503:         entry = {'kind': _KIND_NAMES.get(col_kinds[col_idx], 'unknown')}
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2503, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (unlikely(__pyx_v_7questdb_7_client__KIND_NAMES == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
      __PYX_ERR(2, 2503, __pyx_L1_error)
    }
    if (unlikely(__pyx_v_col_kinds == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2503, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_col_kinds, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2503, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__KIND_NAMES, __pyx_t_6, __pyx_mstate_global->__pyx_n_u_unknown); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2503, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_kind, __pyx_t_7) < (0)) __PYX_ERR(2, 2503, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF_SET(__pyx_v_entry, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;
+2504:         if col_scales[col_idx] is not None:
    if (unlikely(__pyx_v_col_scales == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2504, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_col_scales, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2504, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = (__pyx_t_2 != Py_None);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_8) {
/* … */
    }
+2505:             entry['scale'] = col_scales[col_idx]
      if (unlikely(__pyx_v_col_scales == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 2505, __pyx_L1_error)
      }
      __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_col_scales, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2505, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely((PyDict_SetItem(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_scale, __pyx_t_2) < 0))) __PYX_ERR(2, 2505, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2506:         if col_precision[col_idx] is not None:
    if (unlikely(__pyx_v_col_precision == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2506, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_col_precision, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2506, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = (__pyx_t_2 != Py_None);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_8) {
/* … */
    }
+2507:             entry['precision_bits'] = col_precision[col_idx]
      if (unlikely(__pyx_v_col_precision == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 2507, __pyx_L1_error)
      }
      __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_col_precision, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2507, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely((PyDict_SetItem(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_precision_bits, __pyx_t_2) < 0))) __PYX_ERR(2, 2507, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+2508:         columns_meta[col_names[col_idx]] = entry
    if (unlikely(__pyx_v_col_names == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2508, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_col_names, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2508, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (unlikely((PyDict_SetItem(__pyx_v_columns_meta, __pyx_t_2, __pyx_v_entry) < 0))) __PYX_ERR(2, 2508, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
+2509:     return _RoundtripClaim(
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_RoundtripClaim); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
+2510:         {'version': _ROUNDTRIP_META_VERSION, 'columns': columns_meta})
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_7questdb_7_client__ROUNDTRIP_META_VERSION); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_version, __pyx_t_10) < (0)) __PYX_ERR(2, 2510, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_columns, __pyx_v_columns_meta) < (0)) __PYX_ERR(2, 2510, __pyx_L1_error)
  __pyx_t_3 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_7);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_7);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_3 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_9};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2509, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 2511: 
 2512: 
+2513: cdef object _numpy_assemble_frame(
static PyObject *__pyx_f_7questdb_7_client__numpy_assemble_frame(PyObject *__pyx_v_col_names, PyObject *__pyx_v_col_kinds, PyObject *__pyx_v_col_scales, PyObject *__pyx_v_col_precision, PyObject *__pyx_v_col_chunks, PyObject *__pyx_v_symbol_categories, PyObject *__pyx_v_np, PyObject *__pyx_v_pd, PyObject *__pyx_v_col_masks, struct __pyx_opt_args_7questdb_7_client__numpy_assemble_frame *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("questdb._client._numpy_assemble_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_arrays);
  __Pyx_XDECREF(__pyx_v_chunks);
  __Pyx_XDECREF(__pyx_v_arr);
  __Pyx_XDECREF(__pyx_v_mask);
  __Pyx_XDECREF(__pyx_v_frame);
  __Pyx_XDECREF(__pyx_v_symbol_dtype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_7questdb_7_client__numpy_assemble_frame {
  int __pyx_n;
  PyObject *symbol_dtype;
  PyObject *claim;
};
 2514:         list col_names, list col_kinds, list col_scales,
 2515:         list col_precision, list col_chunks, list symbol_categories,
+2516:         object np, object pd, list col_masks, object symbol_dtype=None,
  PyObject *__pyx_v_symbol_dtype = ((PyObject *)Py_None);
+2517:         object claim=None):
  PyObject *__pyx_v_claim = ((PyObject *)Py_None);
  size_t __pyx_v_n_cols;
  size_t __pyx_v_col_idx;
  enum qwp_reader_column_kind __pyx_v_kind;
  PyObject *__pyx_v_arrays = NULL;
  PyObject *__pyx_v_chunks = NULL;
  PyObject *__pyx_v_arr = NULL;
  PyObject *__pyx_v_mask = NULL;
  PyObject *__pyx_v_frame = NULL;
  PyObject *__pyx_r = NULL;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_symbol_dtype = __pyx_optional_args->symbol_dtype;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_claim = __pyx_optional_args->claim;
      }
    }
  }
  __Pyx_INCREF(__pyx_v_symbol_dtype);
+2518:     cdef size_t n_cols = <size_t>len(col_names)
  if (unlikely(__pyx_v_col_names == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 2518, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_col_names); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(2, 2518, __pyx_L1_error)
  __pyx_v_n_cols = ((size_t)__pyx_t_1);
 2519:     cdef size_t col_idx
 2520:     cdef qwp_reader_column_kind kind
+2521:     arrays = []
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_arrays = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+2522:     for col_idx in range(n_cols):
  __pyx_t_3 = __pyx_v_n_cols;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_col_idx = __pyx_t_5;
+2523:         kind = <qwp_reader_column_kind><int>col_kinds[col_idx]
    if (unlikely(__pyx_v_col_kinds == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2523, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_col_kinds, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2523, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 2523, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_kind = ((enum qwp_reader_column_kind)((int)__pyx_t_6));
+2524:         chunks = col_chunks[col_idx]
    if (unlikely(__pyx_v_col_chunks == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2524, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_col_chunks, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2524, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_chunks, __pyx_t_2);
    __pyx_t_2 = 0;
+2525:         if len(chunks) == 1:
    __pyx_t_1 = PyObject_Length(__pyx_v_chunks); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(2, 2525, __pyx_L1_error)
    __pyx_t_7 = (__pyx_t_1 == 1);
    if (__pyx_t_7) {
/* … */
      goto __pyx_L5;
    }
+2526:             arr = chunks[0]
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_chunks, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2526, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF_SET(__pyx_v_arr, __pyx_t_2);
      __pyx_t_2 = 0;
 2527:         else:
+2528:             arr = np.concatenate(chunks)
    /*else*/ {
      __pyx_t_8 = __pyx_v_np;
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_9 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_chunks};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_concatenate, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2528, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_v_arr, __pyx_t_2);
      __pyx_t_2 = 0;
    }
    __pyx_L5:;
+2529:         if kind == qwp_reader_column_kind_symbol:
    __pyx_t_7 = (__pyx_v_kind == qwp_reader_column_kind_symbol);
    if (__pyx_t_7) {
/* … */
      goto __pyx_L6;
    }
 2530:             # Build the category Index once (here for fetch-all, or supplied
 2531:             # pre-built by `_NumpyBatchIter` across batches) and reuse it via
 2532:             # `dtype=` for every SYMBOL column, then build from the codes with no
 2533:             # bounds re-validation. Avoids the O(columns/batches x cardinality)
 2534:             # Index rebuild + validation the `categories=`/validate path costs.
+2535:             if symbol_dtype is None:
      __pyx_t_7 = (__pyx_v_symbol_dtype == Py_None);
      if (__pyx_t_7) {
/* … */
      }
+2536:                 symbol_dtype = pd.CategoricalDtype(symbol_categories)
        __pyx_t_8 = __pyx_v_pd;
        __Pyx_INCREF(__pyx_t_8);
        __pyx_t_9 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_symbol_categories};
          __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_CategoricalDtype, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2536, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_DECREF_SET(__pyx_v_symbol_dtype, __pyx_t_2);
        __pyx_t_2 = 0;
+2537:             arr = _symbol_from_codes(pd, arr, symbol_dtype)
      __pyx_t_2 = __pyx_f_7questdb_7_client__symbol_from_codes(__pyx_v_pd, __pyx_v_arr, __pyx_v_symbol_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2537, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_arr, __pyx_t_2);
      __pyx_t_2 = 0;
+2538:         elif _is_hybrid_int(kind):
    __pyx_t_7 = __pyx_f_7questdb_7_client__is_hybrid_int(__pyx_v_kind); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(2, 2538, __pyx_L1_error)
    if (__pyx_t_7) {
/* … */
    }
    __pyx_L6:;
+2539:             mask = _combine_hybrid_mask(chunks, col_masks[col_idx], np)
      __pyx_t_2 = __pyx_v_chunks;
      __Pyx_INCREF(__pyx_t_2);
      if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(2, 2539, __pyx_L1_error)
      if (unlikely(__pyx_v_col_masks == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 2539, __pyx_L1_error)
      }
      __pyx_t_8 = __Pyx_GetItemInt_List(__pyx_v_col_masks, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 2539, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (!(likely(PyList_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_8))) __PYX_ERR(2, 2539, __pyx_L1_error)
      __pyx_t_10 = __pyx_f_7questdb_7_client__combine_hybrid_mask(((PyObject*)__pyx_t_2), ((PyObject*)__pyx_t_8), __pyx_v_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2539, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF_SET(__pyx_v_mask, __pyx_t_10);
      __pyx_t_10 = 0;
+2540:             if mask is not None:
      __pyx_t_7 = (__pyx_v_mask != Py_None);
      if (__pyx_t_7) {
/* … */
      }
+2541:                 arr = _build_nullable_array(arr, mask, kind, pd)
        __pyx_t_10 = __pyx_f_7questdb_7_client__build_nullable_array(__pyx_v_arr, __pyx_v_mask, __pyx_v_kind, __pyx_v_pd); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2541, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF_SET(__pyx_v_arr, __pyx_t_10);
        __pyx_t_10 = 0;
+2542:         arrays.append(arr)
    __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_arrays, __pyx_v_arr); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 2542, __pyx_L1_error)
  }
+2543:     frame = pd.DataFrame(dict(enumerate(arrays)), copy=False)
  __pyx_t_8 = __pyx_v_pd;
  __Pyx_INCREF(__pyx_t_8);
  __pyx_t_12 = NULL;
  __pyx_t_14 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_14, __pyx_v_arrays};
    __pyx_t_13 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_enumerate, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 2543, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
  }
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_13};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2543, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_8, __pyx_t_2};
    __pyx_t_13 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 2543, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_copy, Py_False, __pyx_t_13, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2543, __pyx_L1_error)
    __pyx_t_10 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_DataFrame, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_13);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2543, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
  }
  __pyx_v_frame = __pyx_t_10;
  __pyx_t_10 = 0;
 2544:     # Keep pandas 3 from inferring a pyarrow-backed StringDtype Index.
+2545:     frame.columns = pd.Index(col_names, dtype=object)
  __pyx_t_13 = __pyx_v_pd;
  __Pyx_INCREF(__pyx_t_13);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_13, __pyx_v_col_names};
    __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_builtin_object, __pyx_t_2, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 2545, __pyx_L1_error)
    __pyx_t_10 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_Index, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_columns, __pyx_t_10) < (0)) __PYX_ERR(2, 2545, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+2546:     frame.attrs['questdb'] = (
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely((PyObject_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_questdb, __pyx_t_10) < 0))) __PYX_ERR(2, 2546, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+2547:         _numpy_roundtrip_claim(
    __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_roundtrip_claim(__pyx_v_col_names, __pyx_v_col_kinds, __pyx_v_col_scales, __pyx_v_col_precision); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 2547, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_10 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
 2548:             col_names, col_kinds, col_scales, col_precision)
+2549:         if claim is None else claim)
  __pyx_t_7 = (__pyx_v_claim == Py_None);
  if (__pyx_t_7) {
/* … */
    __Pyx_INCREF(__pyx_v_claim);
    __pyx_t_10 = __pyx_v_claim;
  }
+2550:     return frame
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_frame);
  __pyx_r = __pyx_v_frame;
  goto __pyx_L0;
 2551: 
 2552: 
+2553: cdef tuple _numpy_batch_columns(
static PyObject *__pyx_f_7questdb_7_client__numpy_batch_columns(struct qwp_reader_batch const *__pyx_v_batch, PyObject *__pyx_v_col_kinds, size_t __pyx_v_n_cols, size_t __pyx_v_row_count, PyObject *__pyx_v_np) {
  size_t __pyx_v_col_idx;
  enum qwp_reader_column_kind __pyx_v_kind;
  PyObject *__pyx_v_chunks = NULL;
  PyObject *__pyx_v_masks = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._numpy_batch_columns", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_chunks);
  __Pyx_XDECREF(__pyx_v_masks);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2554:         const qwp_reader_batch* batch, list col_kinds,
 2555:         size_t n_cols, size_t row_count, object np):
 2556:     cdef size_t col_idx
 2557:     cdef qwp_reader_column_kind kind
+2558:     chunks = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_chunks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2559:     masks = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_masks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+2560:     for col_idx in range(n_cols):
  __pyx_t_2 = __pyx_v_n_cols;
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_col_idx = __pyx_t_4;
+2561:         kind = <qwp_reader_column_kind><int>col_kinds[col_idx]
    if (unlikely(__pyx_v_col_kinds == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 2561, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_col_kinds, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2561, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 2561, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_kind = ((enum qwp_reader_column_kind)((int)__pyx_t_5));
+2562:         chunks.append(_numpy_column_chunk(batch, col_idx, kind, row_count, np))
    __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_column_chunk(__pyx_v_batch, __pyx_v_col_idx, __pyx_v_kind, __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2562, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_chunks, __pyx_t_1); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 2562, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2563:         if _is_hybrid_int(kind):
    __pyx_t_7 = __pyx_f_7questdb_7_client__is_hybrid_int(__pyx_v_kind); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(2, 2563, __pyx_L1_error)
    if (__pyx_t_7) {
/* … */
      goto __pyx_L5;
    }
+2564:             masks.append(_numpy_validity_mask(batch, col_idx, row_count, np))
      __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_validity_mask(__pyx_v_batch, __pyx_v_col_idx, __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2564, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_masks, __pyx_t_1); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 2564, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2565:         else:
+2566:             masks.append(None)
    /*else*/ {
      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_masks, Py_None); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(2, 2566, __pyx_L1_error)
    }
    __pyx_L5:;
  }
+2567:     return (chunks, masks)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2567, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_chunks);
  __Pyx_GIVEREF(__pyx_v_chunks);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_chunks) != (0)) __PYX_ERR(2, 2567, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_masks);
  __Pyx_GIVEREF(__pyx_v_masks);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_masks) != (0)) __PYX_ERR(2, 2567, __pyx_L1_error);
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2568: 
 2569: 
 2570: # ---------------------------------------------------------------------------
 2571: # Row egress: `QueryResult.columns()` / `QueryResult.iter_rows()`.
 2572: #
 2573: # Built on the same raw-batch C API as the numpy path
 2574: # (`qwp_reader_cursor_next_batch` + the `qwp_reader_column_data` view), not on
 2575: # Arrow: a row consumer wants Python objects, and going through Arrow would
 2576: # add a conversion and a hard `pyarrow` dependency to get them. Serves
 2577: # DB-API-shaped callers — dbt, a PEP 249 shim, plain scripting — where result
 2578: # sets are small (metadata lookups, test rows, `LIMIT 0` schema probes) and
 2579: # exact QuestDB type names matter more than throughput. Large analytical
 2580: # results still belong on `to_pandas()` / `to_arrow()`, which stay columnar.
 2581: # ---------------------------------------------------------------------------
 2582: 
 2583: # `datetime.min` / `datetime.max` as microseconds since the epoch.
+2584: cdef int64_t _DATETIME_MIN_MICROS = -62_135_596_800_000_000
  __pyx_v_7questdb_7_client__DATETIME_MIN_MICROS = -62135596800000000L;
+2585: cdef int64_t _DATETIME_MAX_MICROS = 253_402_300_799_999_999
  __pyx_v_7questdb_7_client__DATETIME_MAX_MICROS = 0x384440CCC735FFF;
+2586: cdef int64_t _MICROS_PER_DAY = 86_400_000_000
  __pyx_v_7questdb_7_client__MICROS_PER_DAY = 0x141DD76000;
 2587: 
 2588: # Geohash base-32 alphabet, matching `GeoHashes.base32` on the server.
+2589: cdef const char* _GEOHASH_BASE32 = b'0123456789bcdefghjkmnpqrstuvwxyz'
  __pyx_v_7questdb_7_client__GEOHASH_BASE32 = __pyx_k_0123456789bcdefghjkmnpqrstuvwxyz;
 2590: 
 2591: 
 2592: # Fixed part of the QuestDB DDL spelling per column kind. GEOHASH and the
 2593: # DECIMALs carry parameters and are rendered by `_questdb_type_name`.
 2594: # Spellings follow `ColumnType.typeNameMap` on the server, including the
 2595: # mixed-case `IPv4`, so a caller can compare them against `tables()` /
 2596: # `information_schema.questdb_columns()` output without normalising.
 2597: _QDB_TYPE_NAMES = {
+2598:     <int>qwp_reader_column_kind_boolean: 'BOOLEAN',
  __pyx_t_18 = __Pyx_PyDict_NewPresized(19); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_boolean)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_BOOLEAN) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2599:     <int>qwp_reader_column_kind_byte: 'BYTE',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_byte)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_BYTE) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2600:     <int>qwp_reader_column_kind_short: 'SHORT',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_short)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_SHORT) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2601:     <int>qwp_reader_column_kind_int: 'INT',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_int)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_INT) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2602:     <int>qwp_reader_column_kind_long: 'LONG',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_long)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_LONG) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2603:     <int>qwp_reader_column_kind_float: 'FLOAT',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_float)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_FLOAT) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2604:     <int>qwp_reader_column_kind_double: 'DOUBLE',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_double)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_DOUBLE) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2605:     <int>qwp_reader_column_kind_symbol: 'SYMBOL',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_symbol)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_SYMBOL) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2606:     <int>qwp_reader_column_kind_timestamp: 'TIMESTAMP',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_timestamp)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_TIMESTAMP) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2607:     <int>qwp_reader_column_kind_date: 'DATE',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_date)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2607, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_DATE) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2608:     <int>qwp_reader_column_kind_uuid: 'UUID',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_uuid)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2608, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_UUID) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2609:     <int>qwp_reader_column_kind_long256: 'LONG256',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_long256)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_LONG256) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 2610:     # STRING columns reach the client as VARCHAR: QWP has no STRING column
 2611:     # kind, so a legacy STRING column is reported as VARCHAR here.
+2612:     <int>qwp_reader_column_kind_varchar: 'VARCHAR',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_varchar)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2612, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_VARCHAR) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2613:     <int>qwp_reader_column_kind_timestamp_nanos: 'TIMESTAMP_NS',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_timestamp_nanos)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_TIMESTAMP_NS) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
 2614:     # The wire schema carries no dimension count, so every array column is
 2615:     # reported in its 1-D spelling; the server writes a 2-D one `DOUBLE[][]`.
+2616:     <int>qwp_reader_column_kind_double_array: 'DOUBLE[]',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_double_array)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_kp_u_DOUBLE_2) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2617:     <int>qwp_reader_column_kind_long_array: 'LONG[]',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_long_array)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2617, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_kp_u_LONG_2) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2618:     <int>qwp_reader_column_kind_char: 'CHAR',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_char)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2618, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_CHAR) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2619:     <int>qwp_reader_column_kind_binary: 'BINARY',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_binary)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_BINARY) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2620:     <int>qwp_reader_column_kind_ipv4: 'IPv4',
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_ipv4)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_n_u_IPv4) < (0)) __PYX_ERR(2, 2598, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QDB_TYPE_NAMES, __pyx_t_18) < (0)) __PYX_ERR(2, 2597, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2621: }
 2622: 
 2623: # Storage-width precision ceilings for the three DECIMAL widths. The wire
 2624: # carries only `decimal_scale`, so a column declared `DECIMAL(10,2)` is
 2625: # reported as `DECIMAL(18,2)` — the declared precision is not recoverable
 2626: # from a result set.
 2627: _DECIMAL_PRECISION = {
+2628:     <int>qwp_reader_column_kind_decimal64: 18,
  __pyx_t_18 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 2628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_decimal64)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_int_18) < (0)) __PYX_ERR(2, 2628, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2629:     <int>qwp_reader_column_kind_decimal128: 38,
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_decimal128)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_int_38) < (0)) __PYX_ERR(2, 2628, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+2630:     <int>qwp_reader_column_kind_decimal256: 76,
  __pyx_t_17 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_decimal256)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  if (PyDict_SetItem(__pyx_t_18, __pyx_t_17, __pyx_mstate_global->__pyx_int_76) < (0)) __PYX_ERR(2, 2628, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_DECIMAL_PRECISION, __pyx_t_18) < (0)) __PYX_ERR(2, 2627, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 2631: }
 2632: 
 2633: 
+2634: cdef str _questdb_type_name(int kind, object scale, object precision_bits):
static PyObject *__pyx_f_7questdb_7_client__questdb_type_name(int __pyx_v_kind, PyObject *__pyx_v_scale, PyObject *__pyx_v_precision_bits) {
  int __pyx_v_bits;
  int __pyx_v_dec_precision;
  PyObject *__pyx_v_name = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client._questdb_type_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2635:     """QuestDB DDL type name for a column kind plus its parameters."""
 2636:     cdef int bits
 2637:     cdef int dec_precision
+2638:     if kind == <int>qwp_reader_column_kind_geohash:
  __pyx_t_1 = (__pyx_v_kind == ((int)qwp_reader_column_kind_geohash));
  if (__pyx_t_1) {
/* … */
  }
 2639:         # `GeoHashes`/`ColumnType`: character form when the width is a whole
 2640:         # number of base-32 characters, bit form otherwise.
+2641:         bits = 0 if precision_bits is None else <int>precision_bits
    __pyx_t_1 = (__pyx_v_precision_bits == Py_None);
    if (__pyx_t_1) {
      __pyx_t_2 = 0;
    } else {
      __pyx_t_3 = __Pyx_PyLong_As_int(__pyx_v_precision_bits); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 2641, __pyx_L1_error)
      __pyx_t_2 = ((int)__pyx_t_3);
    }
    __pyx_v_bits = __pyx_t_2;
+2642:         if bits > 0 and bits % 5 == 0:
    __pyx_t_4 = (__pyx_v_bits > 0);
    if (__pyx_t_4) {
    } else {
      __pyx_t_1 = __pyx_t_4;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_4 = (__Pyx_mod_long(__pyx_v_bits, 5, 1) == 0);
    __pyx_t_1 = __pyx_t_4;
    __pyx_L5_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
+2643:             return 'GEOHASH({}c)'.format(bits // 5)
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_GEOHASH_c;
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyLong_From_long(__Pyx_div_long(__pyx_v_bits, 5, 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2643, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2643, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_r = ((PyObject*)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;
+2644:         return 'GEOHASH({}b)'.format(bits)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7 = __pyx_mstate_global->__pyx_kp_u_GEOHASH_b;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_bits); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2644, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_r = ((PyObject*)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;
+2645:     if kind in _DECIMAL_PRECISION:
  __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_kind); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_DECIMAL_PRECISION); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_t_5, __pyx_t_6, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 2645, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_1) {
/* … */
  }
+2646:         dec_precision = <int>_DECIMAL_PRECISION[kind]
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_DECIMAL_PRECISION); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_6, __pyx_v_kind, int, 1, __Pyx_PyLong_From_int, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_2 = __Pyx_PyLong_As_int(__pyx_t_5); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 2646, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_dec_precision = ((int)__pyx_t_2);
+2647:         return 'DECIMAL({},{})'.format(
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_DECIMAL;
    __Pyx_INCREF(__pyx_t_6);
+2648:             dec_precision, 0 if scale is None else <int>scale)
    __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_dec_precision); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2648, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_1 = (__pyx_v_scale == Py_None);
    if (__pyx_t_1) {
      __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
      __pyx_t_9 = __pyx_mstate_global->__pyx_int_0;
    } else {
      __pyx_t_2 = __Pyx_PyLong_As_int(__pyx_v_scale); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 2648, __pyx_L1_error)
      __pyx_t_10 = __Pyx_PyLong_From_int(((int)__pyx_t_2)); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 2648, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_9 = __pyx_t_10;
      __pyx_t_10 = 0;
    }
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_7, __pyx_t_9};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2647, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_r = ((PyObject*)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;
+2649:     name = _QDB_TYPE_NAMES.get(kind)
  __pyx_t_9 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QDB_TYPE_NAMES); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2649, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_get); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2649, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_kind); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2649, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_9);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_7};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2649, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_v_name = __pyx_t_5;
  __pyx_t_5 = 0;
+2650:     if name is None:
  __pyx_t_1 = (__pyx_v_name == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+2651:         return 'UNKNOWN(0x{:02X})'.format(kind)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __pyx_mstate_global->__pyx_kp_u_UNKNOWN_0x_02X;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_kind); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2651, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_r = ((PyObject*)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;
+2652:     return name
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __pyx_v_name;
  __Pyx_INCREF(__pyx_t_5);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_5))) __PYX_ERR(2, 2652, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
  goto __pyx_L0;
 2653: 
 2654: 
+2655: cdef str _geohash_text(uint64_t value, int bits):
static PyObject *__pyx_f_7questdb_7_client__geohash_text(uint64_t __pyx_v_value, int __pyx_v_bits) {
  char __pyx_v_buf[64];
  int __pyx_v_i;
  int __pyx_v_n;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._geohash_text", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2656:     """Render a geohash the way the server's text protocols do.
 2657: 
 2658:     `GeoHashes.appendCharsUnsafe` for a whole number of base-32 characters,
 2659:     `appendBinaryStringUnsafe` (a run of '0'/'1') otherwise. Returning the
 2660:     raw integer instead would be unusable against a `where geohash = '...'`
 2661:     predicate.
 2662:     """
 2663:     # `bits` is 1..60 (checked by the caller), so at most 60 characters.
 2664:     cdef char[64] buf
 2665:     cdef int i
 2666:     cdef int n
+2667:     if bits > 0 and bits % 5 == 0:
  __pyx_t_2 = (__pyx_v_bits > 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__Pyx_mod_long(__pyx_v_bits, 5, 1) == 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+2668:         n = bits // 5
    __pyx_v_n = __Pyx_div_long(__pyx_v_bits, 5, 1);
+2669:         for i in range(n):
    __pyx_t_3 = __pyx_v_n;
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_i = __pyx_t_5;
+2670:             buf[i] = _GEOHASH_BASE32[(value >> ((n - 1 - i) * 5)) & 0x1F]
      (__pyx_v_buf[__pyx_v_i]) = (__pyx_v_7questdb_7_client__GEOHASH_BASE32[((__pyx_v_value >> (((__pyx_v_n - 1) - __pyx_v_i) * 5)) & 0x1F)]);
    }
 2671:     else:
+2672:         n = bits
  /*else*/ {
    __pyx_v_n = __pyx_v_bits;
+2673:         for i in range(n):
    __pyx_t_3 = __pyx_v_n;
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_i = __pyx_t_5;
+2674:             buf[i] = c'1' if (value >> (n - 1 - i)) & 1 else c'0'
      __pyx_t_1 = (((__pyx_v_value >> ((__pyx_v_n - 1) - __pyx_v_i)) & 1) != 0);
      if (__pyx_t_1) {
        __pyx_t_6 = '1';
      } else {
        __pyx_t_6 = '0';
      }
      (__pyx_v_buf[__pyx_v_i]) = __pyx_t_6;
    }
  }
  __pyx_L3:;
+2675:     return PyUnicode_FromStringAndSize(buf, n)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_7 = PyUnicode_FromStringAndSize(__pyx_v_buf, __pyx_v_n); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_r = ((PyObject*)__pyx_t_7);
  __pyx_t_7 = 0;
  goto __pyx_L0;
 2676: 
 2677: 
+2678: cdef inline bint _cell_is_null(const uint8_t* validity, size_t row) noexcept:
static CYTHON_INLINE int __pyx_f_7questdb_7_client__cell_is_null(uint8_t const *__pyx_v_validity, size_t __pyx_v_row) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 2679:     # Per QWP the null bitmap is LSB-first within each byte and a set bit
 2680:     # means NULL; a column with no nulls carries no bitmap at all.
+2681:     return validity != NULL and ((validity[row >> 3] >> (row & 7)) & 1)
  __pyx_t_2 = (__pyx_v_validity != NULL);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = ((((__pyx_v_validity[(__pyx_v_row >> 3)]) >> (__pyx_v_row & 7)) & 1) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 2682: 
 2683: 
+2684: cdef void_int _raise_temporal_out_of_range(
static __pyx_t_7questdb_7_client_void_int __pyx_f_7questdb_7_client__raise_temporal_out_of_range(PyObject *__pyx_v_col_name, size_t __pyx_v_row, int64_t __pyx_v_value) {
  __pyx_t_7questdb_7_client_void_int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._raise_temporal_out_of_range", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2685:         str col_name, size_t row, int64_t value) except -1:
+2686:     raise QuestDBError(
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 2686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+2687:         QuestDBErrorCode.InvalidTimestamp,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidTimestamp); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2688:         f'column {col_name!r} row {row}: value {value} is outside the range '
  __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyUnicode_From_size_t(__pyx_v_row, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyUnicode_From_int64_t(__pyx_v_value, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_column_3;
  __pyx_t_8[1] = __pyx_t_4;
  __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_row;
  __pyx_t_8[3] = __pyx_t_6;
  __pyx_t_8[4] = __pyx_mstate_global->__pyx_kp_u_value_2;
  __pyx_t_8[5] = __pyx_t_7;
  __pyx_t_8[6] = __pyx_mstate_global->__pyx_kp_u_is_outside_the_range_datetime_c;
  __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 7, 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 5 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 106, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4));
  if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_10 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_10 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_5, __pyx_t_9};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2686, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(2, 2686, __pyx_L1_error)
 2689:         'datetime can represent (years 1..9999); use to_pandas() / '
 2690:         'to_arrow() for this result')
 2691: 
 2692: 
+2693: cdef object _utc_datetime(int64_t days, int secs, int micros):
static PyObject *__pyx_f_7questdb_7_client__utc_datetime(int64_t __pyx_v_days, int __pyx_v_secs, int __pyx_v_micros) {
  int __pyx_v_z;
  int __pyx_v_era;
  int __pyx_v_doe;
  int __pyx_v_yoe;
  int __pyx_v_doy;
  int __pyx_v_mp;
  int __pyx_v_month;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._utc_datetime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2694:     cdef int z = <int>days + 719468
  __pyx_v_z = (((int)__pyx_v_days) + 0xAFA6C);
+2695:     cdef int era = z // 146097
  __pyx_v_era = __Pyx_div_long(__pyx_v_z, 0x23AB1, 1);
+2696:     cdef int doe = z - era * 146097
  __pyx_v_doe = (__pyx_v_z - (__pyx_v_era * 0x23AB1));
+2697:     cdef int yoe = (doe - doe // 1460 + doe // 36524 - doe // 146096) // 365
  __pyx_v_yoe = __Pyx_div_long((((__pyx_v_doe - __Pyx_div_long(__pyx_v_doe, 0x5B4, 1)) + __Pyx_div_long(__pyx_v_doe, 0x8EAC, 1)) - __Pyx_div_long(__pyx_v_doe, 0x23AB0, 1)), 0x16D, 1);
+2698:     cdef int doy = doe - (365 * yoe + yoe // 4 - yoe // 100)
  __pyx_v_doy = (__pyx_v_doe - (((0x16D * __pyx_v_yoe) + __Pyx_div_long(__pyx_v_yoe, 4, 1)) - __Pyx_div_long(__pyx_v_yoe, 0x64, 1)));
+2699:     cdef int mp = (5 * doy + 2) // 153
  __pyx_v_mp = __Pyx_div_long(((5 * __pyx_v_doy) + 2), 0x99, 1);
+2700:     cdef int month = mp + 3 if mp < 10 else mp - 9
  __pyx_t_2 = (__pyx_v_mp < 10);
  if (__pyx_t_2) {
    __pyx_t_1 = (__pyx_v_mp + 3);
  } else {
    __pyx_t_1 = (__pyx_v_mp - 9);
  }
  __pyx_v_month = __pyx_t_1;
+2701:     return datetime_new(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_4 = ((PyObject *)__pyx_f_7cpython_8datetime_datetime_new((((__pyx_v_era * 0x190) + __pyx_v_yoe) + (__pyx_v_month <= 2)), __pyx_v_month, ((__pyx_v_doy - __Pyx_div_long(((0x99 * __pyx_v_mp) + 2), 5, 1)) + 1), __Pyx_div_long(__pyx_v_secs, 0xE10, 1), __Pyx_mod_long(__Pyx_div_long(__pyx_v_secs, 60, 1), 60, 1), __Pyx_mod_long(__pyx_v_secs, 60, 1), __pyx_v_micros, __pyx_t_3, NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2701, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 2702:         era * 400 + yoe + (month <= 2), month, doy - (153 * mp + 2) // 5 + 1,
+2703:         secs // 3600, secs // 60 % 60, secs % 60, micros, _UTC)
  __pyx_t_3 = __pyx_v_7questdb_7_client__UTC;
  __Pyx_INCREF(__pyx_t_3);
 2704: 
 2705: 
+2706: cdef list _row_column_values(
static PyObject *__pyx_f_7questdb_7_client__row_column_values(struct qwp_reader_batch const *__pyx_v_batch, size_t __pyx_v_col_idx, PyObject *__pyx_v_col_name, int __pyx_v_kind, size_t __pyx_v_row_count, struct qwp_reader_symbol_dict const *__pyx_v_sd, struct __pyx_obj_7questdb_7_client__SymbolStrings *__pyx_v_symbols, PyObject *__pyx_v_np) {
  struct qwp_reader_column_data __pyx_v_cd;
  questdb_error *__pyx_v_err;
  uint8_t const *__pyx_v_validity;
  uint8_t const *__pyx_v_values;
  uint32_t const *__pyx_v_offsets;
  uint8_t const *__pyx_v_var_data;
  uint32_t const *__pyx_v_codes;
  PyObject *__pyx_v_slot;
  size_t __pyx_v_r;
  size_t __pyx_v_stride;
  uint32_t __pyx_v_start;
  uint32_t __pyx_v_end;
  uint32_t __pyx_v_code;
  uint64_t __pyx_v_lo;
  uint64_t __pyx_v_hi;
  uint64_t __pyx_v_u64;
  int64_t __pyx_v_i64;
  int32_t __pyx_v_i32;
  int16_t __pyx_v_i16;
  uint16_t __pyx_v_u16;
  uint32_t __pyx_v_u32;
  float __pyx_v_f32;
  double __pyx_v_f64;
  int __pyx_v_scale;
  int __pyx_v_bits;
  int64_t __pyx_v_micros;
  int64_t __pyx_v_days;
  int64_t __pyx_v_rem;
  int64_t __pyx_v_secs;
  PyObject *__pyx_v_out = 0;
  PyObject *__pyx_v_ipv4_cls = 0;
  PyObject *__pyx_v_decimal_cls = 0;
  PyObject *__pyx_v_uuid_cls = 0;
  PyObject *__pyx_v_chunk = NULL;
  PyObject *__pyx_v_unscaled = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("questdb._client._row_column_values", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_ipv4_cls);
  __Pyx_XDECREF(__pyx_v_decimal_cls);
  __Pyx_XDECREF(__pyx_v_uuid_cls);
  __Pyx_XDECREF(__pyx_v_chunk);
  __Pyx_XDECREF(__pyx_v_unscaled);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2707:         const qwp_reader_batch* batch,
 2708:         size_t col_idx,
 2709:         str col_name,
 2710:         int kind,
 2711:         size_t row_count,
 2712:         const qwp_reader_symbol_dict* sd,
 2713:         _SymbolStrings symbols,
 2714:         object np):
 2715:     """Decode one column of one batch into a list of Python values.
 2716: 
 2717:     Dispatch happens once per column rather than once per cell, which is
 2718:     where a naive row reader spends most of its time. `None` marks a null.
 2719:     """
 2720:     cdef qwp_reader_column_data cd
+2721:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 2722:     cdef const uint8_t* validity
 2723:     cdef const uint8_t* values
 2724:     cdef const uint32_t* offsets
 2725:     cdef const uint8_t* var_data
 2726:     cdef const uint32_t* codes
 2727:     cdef PyObject* slot
 2728:     cdef size_t r
 2729:     cdef size_t stride
 2730:     cdef uint32_t start
 2731:     cdef uint32_t end
 2732:     cdef uint32_t code
 2733:     cdef uint64_t lo
 2734:     cdef uint64_t hi
 2735:     cdef uint64_t u64
 2736:     cdef int64_t i64
 2737:     cdef int32_t i32
 2738:     cdef int16_t i16
 2739:     cdef uint16_t u16
 2740:     cdef uint32_t u32
 2741:     cdef float f32
 2742:     cdef double f64
 2743:     cdef int scale
 2744:     cdef int bits
 2745:     cdef int64_t micros
 2746:     cdef int64_t days
 2747:     cdef int64_t rem
 2748:     cdef int64_t secs
+2749:     cdef list out = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 2750:     cdef object ipv4_cls
 2751:     cdef object decimal_cls
 2752:     cdef object uuid_cls
 2753: 
 2754:     # Arrays have their own accessor: `qwp_reader_batch_column_data` fails
 2755:     # outright on an array column, so this branch must come before it.
 2756:     # `_numpy_array_chunk` already walks the shape table and yields
 2757:     # ndarrays, so reuse it rather than re-deriving that here.
+2758:     if (kind == <int>qwp_reader_column_kind_double_array
  __pyx_t_3 = (__pyx_v_kind == ((int)qwp_reader_column_kind_double_array));
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
/* … */
  if (__pyx_t_2) {
/* … */
  }
+2759:             or kind == <int>qwp_reader_column_kind_long_array):
  __pyx_t_3 = (__pyx_v_kind == ((int)qwp_reader_column_kind_long_array));
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
+2760:         if row_count == 0:
    __pyx_t_2 = (__pyx_v_row_count == 0);
    if (__pyx_t_2) {
/* … */
    }
+2761:             return out
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_out);
      __pyx_r = __pyx_v_out;
      goto __pyx_L0;
+2762:         if kind == <int>qwp_reader_column_kind_long_array:
    __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_long_array));
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+2763:             raise QuestDBError(
      __pyx_t_4 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+2764:                 QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2764, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2764, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+2765:                 f'column {col_name!r}: row egress does not support LONG[] '
      __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 2765, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_column_3;
      __pyx_t_8[1] = __pyx_t_6;
      __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_row_egress_does_not_support_LON;
      __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 48, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6));
      if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2765, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
        assert(__pyx_t_4);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_9};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2763, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(2, 2763, __pyx_L1_error)
 2766:                 'columns yet')
+2767:         chunk = _numpy_array_chunk(
    __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_array_chunk(__pyx_v_batch, __pyx_v_col_idx, ((enum qwp_reader_column_kind)__pyx_v_kind), __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_chunk = __pyx_t_1;
    __pyx_t_1 = 0;
 2768:             batch, col_idx, <qwp_reader_column_kind>kind, row_count, np)
+2769:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2770:             out.append(chunk[r])
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_chunk, __pyx_v_r, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2770, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
+2771:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2772: 
+2773:     _reader_check(
  __pyx_t_14 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_column_data(__pyx_v_batch, __pyx_v_col_idx, (&__pyx_v_cd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_column_data); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(2, 2773, __pyx_L1_error)
 2774:         qwp_reader_batch_column_data(batch, col_idx, &cd, &err), &err,
 2775:         'qwp_reader_batch_column_data')
+2776:     if <int>cd.kind != kind:
  __pyx_t_2 = (((int)__pyx_v_cd.kind) != __pyx_v_kind);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+2777:         raise QuestDBError(
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2777, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
+2778:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+2779:             f'column {col_name!r} changed kind mid-query: expected '
    __pyx_t_15 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 2779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_column_3;
    __pyx_t_8[1] = __pyx_t_15;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_changed_kind_mid_query_expected;
    __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15) + 66, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15));
    if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 2779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_6 = __pyx_t_16;
    __Pyx_INCREF(__pyx_t_6);
+2780:             '0x{:02X}, batch carries 0x{:02X}'.format(kind, <int>cd.kind))
    __pyx_t_15 = __Pyx_PyLong_From_int(__pyx_v_kind); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 2780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_17 = __Pyx_PyLong_From_int(((int)__pyx_v_cd.kind)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __pyx_t_10 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_15, __pyx_t_17};
      __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2780, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_4, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2777, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 2777, __pyx_L1_error)
+2781:     if row_count == 0:
  __pyx_t_2 = (__pyx_v_row_count == 0);
  if (__pyx_t_2) {
/* … */
  }
+2782:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
+2783:     validity = cd.validity
  __pyx_t_18 = __pyx_v_cd.validity;
  __pyx_v_validity = __pyx_t_18;
 2784: 
+2785:     if kind == <int>qwp_reader_column_kind_symbol:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_symbol));
  if (__pyx_t_2) {
/* … */
  }
+2786:         codes = cd.symbol_codes
    __pyx_t_19 = __pyx_v_cd.symbol_codes;
    __pyx_v_codes = __pyx_t_19;
+2787:         if codes == NULL:
    __pyx_t_2 = (__pyx_v_codes == NULL);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+2788:             raise QuestDBError(
      __pyx_t_9 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2788, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+2789:                 QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2789, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2789, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+2790:                 'symbol column has {} rows but no code array'.format(
      __pyx_t_16 = __pyx_mstate_global->__pyx_kp_u_symbol_column_has_rows_but_no_co_2;
      __Pyx_INCREF(__pyx_t_16);
+2791:                     row_count))
      __pyx_t_17 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2791, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __pyx_t_10 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_t_17};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2790, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_9);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_5, __pyx_t_4};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2788, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(2, 2788, __pyx_L1_error)
+2792:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2793:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2794:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2794, __pyx_L1_error)
+2795:                 continue
        goto __pyx_L14_continue;
+2796:             code = codes[r]
      __pyx_v_code = (__pyx_v_codes[__pyx_v_r]);
+2797:             if <size_t>code >= sd.entry_count:
      __pyx_t_2 = (((size_t)__pyx_v_code) >= __pyx_v_sd->entry_count);
      if (unlikely(__pyx_t_2)) {
/* … */
      }
+2798:                 raise QuestDBError(
        __pyx_t_7 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2798, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
+2799:                     QuestDBErrorCode.ServerFlushError,
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2799, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2799, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_20 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
          assert(__pyx_t_7);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
          __pyx_t_20 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_9, __pyx_mstate_global->__pyx_kp_u_corrupt_symbol_codes_code_out_of};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2798, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_Raise(__pyx_t_1, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(2, 2798, __pyx_L1_error)
 2800:                     'corrupt symbol codes: code out of dictionary range')
+2801:             slot = symbols._slots[code]
      __pyx_v_slot = (__pyx_v_symbols->_slots[__pyx_v_code]);
+2802:             if slot == NULL:
      __pyx_t_2 = (__pyx_v_slot == NULL);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L18;
      }
+2803:                 out.append(symbols._decode(sd, code))
        __pyx_t_1 = ((struct __pyx_vtabstruct_7questdb_7_client__SymbolStrings *)__pyx_v_symbols->__pyx_vtab)->_decode(__pyx_v_symbols, __pyx_v_sd, __pyx_v_code); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2803, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2803, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2804:             else:
+2805:                 out.append(<object>slot)
      /*else*/ {
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, ((PyObject *)__pyx_v_slot)); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2805, __pyx_L1_error)
      }
      __pyx_L18:;
      __pyx_L14_continue:;
    }
+2806:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2807: 
 2808:     # VARCHAR / BINARY share the offsets + heap layout.
+2809:     if (kind == <int>qwp_reader_column_kind_varchar
  __pyx_t_3 = (__pyx_v_kind == ((int)qwp_reader_column_kind_varchar));
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L20_bool_binop_done;
  }
/* … */
  if (__pyx_t_2) {
/* … */
  }
+2810:             or kind == <int>qwp_reader_column_kind_binary):
  __pyx_t_3 = (__pyx_v_kind == ((int)qwp_reader_column_kind_binary));
  __pyx_t_2 = __pyx_t_3;
  __pyx_L20_bool_binop_done:;
+2811:         offsets = cd.var_offsets
    __pyx_t_21 = __pyx_v_cd.var_offsets;
    __pyx_v_offsets = __pyx_t_21;
+2812:         if offsets == NULL:
    __pyx_t_2 = (__pyx_v_offsets == NULL);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+2813:             raise QuestDBError(
      __pyx_t_4 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2813, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
+2814:                 QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2814, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2814, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+2815:                 'column kind 0x{:02X} has {} rows but no offset table'.format(
      __pyx_t_17 = __pyx_mstate_global->__pyx_kp_u_column_kind_0x_02X_has_rows_but_2;
      __Pyx_INCREF(__pyx_t_17);
+2816:                     kind, row_count))
      __pyx_t_16 = __Pyx_PyLong_From_int(__pyx_v_kind); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 2816, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __pyx_t_15 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 2816, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_10 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_17, __pyx_t_16, __pyx_t_15};
        __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2815, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
      }
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9);
        assert(__pyx_t_4);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_t_7};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2813, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(2, 2813, __pyx_L1_error)
+2817:         var_data = cd.var_data
    __pyx_t_22 = __pyx_v_cd.var_data;
    __pyx_v_var_data = __pyx_t_22;
+2818:         if var_data == NULL and cd.var_data_len > 0:
    __pyx_t_3 = (__pyx_v_var_data == NULL);
    if (__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L24_bool_binop_done;
    }
    __pyx_t_3 = (__pyx_v_cd.var_data_len > 0);
    __pyx_t_2 = __pyx_t_3;
    __pyx_L24_bool_binop_done:;
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+2819:             raise QuestDBError(
      __pyx_t_9 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2819, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+2820:                 QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+2821:                 'column kind 0x{:02X} has {} rows but no data buffer'.format(
      __pyx_t_15 = __pyx_mstate_global->__pyx_kp_u_column_kind_0x_02X_has_rows_but_3;
      __Pyx_INCREF(__pyx_t_15);
+2822:                     kind, row_count))
      __pyx_t_16 = __Pyx_PyLong_From_int(__pyx_v_kind); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 2822, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __pyx_t_17 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2822, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __pyx_t_10 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_15, __pyx_t_16, __pyx_t_17};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2821, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_9);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_4, __pyx_t_5};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2819, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(2, 2819, __pyx_L1_error)
+2823:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2824:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2825:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2825, __pyx_L1_error)
+2826:                 continue
        goto __pyx_L26_continue;
+2827:             start = offsets[r]
      __pyx_v_start = (__pyx_v_offsets[__pyx_v_r]);
+2828:             end = offsets[r + 1]
      __pyx_v_end = (__pyx_v_offsets[(__pyx_v_r + 1)]);
+2829:             if end < start or <size_t>end > cd.var_data_len:
      __pyx_t_3 = (__pyx_v_end < __pyx_v_start);
      if (!__pyx_t_3) {
      } else {
        __pyx_t_2 = __pyx_t_3;
        goto __pyx_L30_bool_binop_done;
      }
      __pyx_t_3 = (((size_t)__pyx_v_end) > __pyx_v_cd.var_data_len);
      __pyx_t_2 = __pyx_t_3;
      __pyx_L30_bool_binop_done:;
      if (unlikely(__pyx_t_2)) {
/* … */
      }
+2830:                 raise QuestDBError(
        __pyx_t_7 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2830, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
+2831:                     QuestDBErrorCode.ServerFlushError,
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2831, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2831, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2832:                     'corrupt varlen offsets in column kind '
+2833:                     '0x{:02X}'.format(kind))
        __pyx_t_17 = __pyx_mstate_global->__pyx_kp_u_corrupt_varlen_offsets_in_column;
        __Pyx_INCREF(__pyx_t_17);
        __pyx_t_16 = __Pyx_PyLong_From_int(__pyx_v_kind); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 2833, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_20 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_16};
          __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_20, (2-__pyx_t_20) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2833, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __pyx_t_20 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
          assert(__pyx_t_7);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
          __pyx_t_20 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_9, __pyx_t_4};
          __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2830, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_Raise(__pyx_t_1, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(2, 2830, __pyx_L1_error)
+2834:             if kind == <int>qwp_reader_column_kind_binary:
      __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_binary));
      if (__pyx_t_2) {
/* … */
        goto __pyx_L32;
      }
+2835:                 out.append(PyBytes_FromStringAndSize(
        __pyx_t_1 = PyBytes_FromStringAndSize(((char const *)(__pyx_v_var_data + __pyx_v_start)), ((Py_ssize_t)(__pyx_v_end - __pyx_v_start))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2835, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2835, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 2836:                     <const char*>(var_data + start),
 2837:                     <Py_ssize_t>(end - start)))
 2838:             else:
+2839:                 out.append(PyUnicode_FromStringAndSize(
      /*else*/ {
/* … */
        __pyx_t_1 = PyUnicode_FromStringAndSize(((char const *)(__pyx_v_var_data + __pyx_v_start)), ((Py_ssize_t)(__pyx_v_end - __pyx_v_start))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2839, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
/* … */
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2839, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __pyx_L32:;
      __pyx_L26_continue:;
    }
 2840:                     <const char*>(var_data + start),
 2841:                     <Py_ssize_t>(end - start)))
+2842:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2843: 
 2844:     # Everything below is fixed-width and needs a values buffer.
+2845:     if cd.values == NULL:
  __pyx_t_2 = (__pyx_v_cd.values == NULL);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+2846:         raise QuestDBError(
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+2847:             QuestDBErrorCode.ServerFlushError,
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2847, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2847, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+2848:             'column kind 0x{:02X} has {} rows but no values buffer'.format(
    __pyx_t_16 = __pyx_mstate_global->__pyx_kp_u_column_kind_0x_02X_has_rows_but;
    __Pyx_INCREF(__pyx_t_16);
+2849:                 kind, row_count))
    __pyx_t_17 = __Pyx_PyLong_From_int(__pyx_v_kind); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 2849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __pyx_t_15 = __Pyx_PyLong_FromSize_t(__pyx_v_row_count); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 2849, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_10 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_16, __pyx_t_17, __pyx_t_15};
      __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2848, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
    }
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_7, __pyx_t_9};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2846, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 2846, __pyx_L1_error)
+2850:     values = <const uint8_t*>cd.values
  __pyx_v_values = ((uint8_t const *)__pyx_v_cd.values);
+2851:     stride = cd.value_stride
  __pyx_t_10 = __pyx_v_cd.value_stride;
  __pyx_v_stride = __pyx_t_10;
 2852: 
+2853:     if kind == <int>qwp_reader_column_kind_boolean:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_boolean));
  if (__pyx_t_2) {
/* … */
  }
 2854:         # BOOLEAN is dense one byte per row on the C side; honour the stride
 2855:         # the decoder reports rather than assuming it.
+2856:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2857:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L37;
      }
+2858:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2858, __pyx_L1_error)
 2859:             else:
+2860:                 out.append(values[r * stride] != 0)
      /*else*/ {
        __pyx_t_1 = __Pyx_PyBool_FromLong(((__pyx_v_values[(__pyx_v_r * __pyx_v_stride)]) != 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2860, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2860, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __pyx_L37:;
    }
+2861:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2862: 
+2863:     if kind == <int>qwp_reader_column_kind_byte:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_byte));
  if (__pyx_t_2) {
/* … */
  }
+2864:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2865:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L41;
      }
+2866:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2866, __pyx_L1_error)
 2867:             else:
+2868:                 out.append(<int>(<const int8_t*>values)[r])
      /*else*/ {
        __pyx_t_1 = __Pyx_PyLong_From_int(((int)(((int8_t const *)__pyx_v_values)[__pyx_v_r]))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2868, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2868, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __pyx_L41:;
    }
+2869:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2870: 
+2871:     if kind == <int>qwp_reader_column_kind_short:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_short));
  if (__pyx_t_2) {
/* … */
  }
+2872:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2873:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2874:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2874, __pyx_L1_error)
+2875:                 continue
        goto __pyx_L43_continue;
+2876:             memcpy(&i16, values + r * stride, 2)
      (void)(memcpy((&__pyx_v_i16), (__pyx_v_values + (__pyx_v_r * __pyx_v_stride)), 2));
+2877:             out.append(<int>i16)
      __pyx_t_1 = __Pyx_PyLong_From_int(((int)__pyx_v_i16)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2877, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2877, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_L43_continue:;
    }
+2878:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2879: 
+2880:     if kind == <int>qwp_reader_column_kind_char:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_char));
  if (__pyx_t_2) {
/* … */
  }
 2881:         # QuestDB has no separate null for CHAR: the wire marks the row
 2882:         # non-null and carries code point 0. PGWire's `outColChar` renders
 2883:         # that as NULL, so match it rather than handing back '\x00'.
+2884:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2885:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2886:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2886, __pyx_L1_error)
+2887:                 continue
        goto __pyx_L47_continue;
+2888:             memcpy(&u16, values + r * stride, 2)
      (void)(memcpy((&__pyx_v_u16), (__pyx_v_values + (__pyx_v_r * __pyx_v_stride)), 2));
+2889:             out.append(None if u16 == 0 else chr(u16))
      __pyx_t_2 = (__pyx_v_u16 == 0);
      if (__pyx_t_2) {
        __Pyx_INCREF(Py_None);
        __pyx_t_1 = Py_None;
      } else {
        __pyx_t_4 = PyUnicode_FromOrdinal(__pyx_v_u16); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2889, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_1 = __pyx_t_4;
        __pyx_t_4 = 0;
      }
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2889, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_L47_continue:;
    }
+2890:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2891: 
+2892:     if kind == <int>qwp_reader_column_kind_int:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_int));
  if (__pyx_t_2) {
/* … */
  }
+2893:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2894:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2895:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2895, __pyx_L1_error)
+2896:                 continue
        goto __pyx_L51_continue;
+2897:             memcpy(&i32, values + r * stride, 4)
      (void)(memcpy((&__pyx_v_i32), (__pyx_v_values + (__pyx_v_r * __pyx_v_stride)), 4));
+2898:             out.append(<int>i32)
      __pyx_t_1 = __Pyx_PyLong_From_int(((int)__pyx_v_i32)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2898, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2898, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_L51_continue:;
    }
+2899:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2900: 
+2901:     if kind == <int>qwp_reader_column_kind_ipv4:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_ipv4));
  if (__pyx_t_2) {
/* … */
  }
 2902:         # The server already turns its IPv4 null sentinel into a validity
 2903:         # bit (`appendIPv4OrNull`), so there is no zero to special-case.
+2904:         ipv4_cls = ipaddress.IPv4Address
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_ipaddress); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2904, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_IPv4Address); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2904, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_ipv4_cls = __pyx_t_4;
    __pyx_t_4 = 0;
+2905:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2906:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2907:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2907, __pyx_L1_error)
+2908:                 continue
        goto __pyx_L55_continue;
+2909:             memcpy(&u32, values + r * stride, 4)
      (void)(memcpy((&__pyx_v_u32), (__pyx_v_values + (__pyx_v_r * __pyx_v_stride)), 4));
+2910:             out.append(ipv4_cls(<unsigned long>u32))
      __pyx_t_1 = NULL;
      __Pyx_INCREF(__pyx_v_ipv4_cls);
      __pyx_t_9 = __pyx_v_ipv4_cls; 
      __pyx_t_7 = __Pyx_PyLong_From_unsigned_long(((unsigned long)__pyx_v_u32)); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 2910, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_20 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);
        assert(__pyx_t_1);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
        __pyx_t_20 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_7};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_20, (2-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2910, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2910, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_L55_continue:;
    }
+2911:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2912: 
+2913:     if kind == <int>qwp_reader_column_kind_long:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_long));
  if (__pyx_t_2) {
/* … */
  }
+2914:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2915:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2916:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2916, __pyx_L1_error)
+2917:                 continue
        goto __pyx_L59_continue;
+2918:             memcpy(&i64, values + r * stride, 8)
      (void)(memcpy((&__pyx_v_i64), (__pyx_v_values + (__pyx_v_r * __pyx_v_stride)), 8));
+2919:             out.append(<long long>i64)
      __pyx_t_4 = __Pyx_PyLong_From_PY_LONG_LONG(((PY_LONG_LONG)__pyx_v_i64)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2919, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2919, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_L59_continue:;
    }
+2920:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2921: 
+2922:     if kind == <int>qwp_reader_column_kind_float:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_float));
  if (__pyx_t_2) {
/* … */
  }
 2923:         # NaN never reaches the values buffer: the server converts it to a
 2924:         # validity bit (`appendFloatOrNull`), so null and NaN are one thing.
+2925:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2926:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2927:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2927, __pyx_L1_error)
+2928:                 continue
        goto __pyx_L63_continue;
+2929:             memcpy(&f32, values + r * stride, 4)
      (void)(memcpy((&__pyx_v_f32), (__pyx_v_values + (__pyx_v_r * __pyx_v_stride)), 4));
+2930:             out.append(<double>f32)
      __pyx_t_4 = PyFloat_FromDouble(((double)__pyx_v_f32)); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2930, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2930, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_L63_continue:;
    }
+2931:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2932: 
+2933:     if kind == <int>qwp_reader_column_kind_double:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_double));
  if (__pyx_t_2) {
/* … */
  }
+2934:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2935:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2936:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2936, __pyx_L1_error)
+2937:                 continue
        goto __pyx_L67_continue;
+2938:             memcpy(&f64, values + r * stride, 8)
      (void)(memcpy((&__pyx_v_f64), (__pyx_v_values + (__pyx_v_r * __pyx_v_stride)), 8));
+2939:             out.append(f64)
      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_f64); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2939, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2939, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_L67_continue:;
    }
+2940:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2941: 
+2942:     if (kind == <int>qwp_reader_column_kind_timestamp
  __pyx_t_3 = (__pyx_v_kind == ((int)qwp_reader_column_kind_timestamp));
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L71_bool_binop_done;
  }
/* … */
  if (__pyx_t_2) {
/* … */
  }
+2943:             or kind == <int>qwp_reader_column_kind_timestamp_nanos
  __pyx_t_3 = (__pyx_v_kind == ((int)qwp_reader_column_kind_timestamp_nanos));
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L71_bool_binop_done;
  }
+2944:             or kind == <int>qwp_reader_column_kind_date):
  __pyx_t_3 = (__pyx_v_kind == ((int)qwp_reader_column_kind_date));
  __pyx_t_2 = __pyx_t_3;
  __pyx_L71_bool_binop_done:;
 2945:         # Timezone-aware UTC, matching the Arrow path, which tags all three
 2946:         # temporal kinds `Timestamp(unit, "UTC")`. A naive datetime would be
 2947:         # read as local time by most downstream code. TIMESTAMP_NS is
 2948:         # rounded down to microseconds: `datetime` has no nanosecond field.
+2949:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2950:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2951:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2951, __pyx_L1_error)
+2952:                 continue
        goto __pyx_L74_continue;
+2953:             memcpy(&i64, values + r * stride, 8)
      (void)(memcpy((&__pyx_v_i64), (__pyx_v_values + (__pyx_v_r * __pyx_v_stride)), 8));
+2954:             if kind == <int>qwp_reader_column_kind_timestamp_nanos:
      __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_timestamp_nanos));
      if (__pyx_t_2) {
/* … */
        goto __pyx_L77;
      }
+2955:                 micros = i64 // 1000
        __pyx_v_micros = __Pyx_div_int64_t(__pyx_v_i64, 0x3E8, 1);
+2956:             elif kind == <int>qwp_reader_column_kind_date:
      __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_date));
      if (__pyx_t_2) {
/* … */
        goto __pyx_L77;
      }
+2957:                 if (i64 < _DATETIME_MIN_MICROS // 1000
        __pyx_t_3 = (__pyx_v_i64 < __Pyx_div_int64_t(__pyx_v_7questdb_7_client__DATETIME_MIN_MICROS, 0x3E8, 1));
        if (!__pyx_t_3) {
        } else {
          __pyx_t_2 = __pyx_t_3;
          goto __pyx_L79_bool_binop_done;
        }
/* … */
        if (__pyx_t_2) {
/* … */
        }
+2958:                         or i64 > _DATETIME_MAX_MICROS // 1000):
        __pyx_t_3 = (__pyx_v_i64 > __Pyx_div_int64_t(__pyx_v_7questdb_7_client__DATETIME_MAX_MICROS, 0x3E8, 1));
        __pyx_t_2 = __pyx_t_3;
        __pyx_L79_bool_binop_done:;
+2959:                     _raise_temporal_out_of_range(col_name, r, i64)
          __pyx_t_23 = __pyx_f_7questdb_7_client__raise_temporal_out_of_range(__pyx_v_col_name, __pyx_v_r, __pyx_v_i64); if (unlikely(__pyx_t_23 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 2959, __pyx_L1_error)
+2960:                 micros = i64 * 1000
        __pyx_v_micros = (__pyx_v_i64 * 0x3E8);
 2961:             else:
+2962:                 micros = i64
      /*else*/ {
        __pyx_v_micros = __pyx_v_i64;
      }
      __pyx_L77:;
+2963:             if micros < _DATETIME_MIN_MICROS or micros > _DATETIME_MAX_MICROS:
      __pyx_t_3 = (__pyx_v_micros < __pyx_v_7questdb_7_client__DATETIME_MIN_MICROS);
      if (!__pyx_t_3) {
      } else {
        __pyx_t_2 = __pyx_t_3;
        goto __pyx_L82_bool_binop_done;
      }
      __pyx_t_3 = (__pyx_v_micros > __pyx_v_7questdb_7_client__DATETIME_MAX_MICROS);
      __pyx_t_2 = __pyx_t_3;
      __pyx_L82_bool_binop_done:;
      if (__pyx_t_2) {
/* … */
      }
+2964:                 _raise_temporal_out_of_range(col_name, r, i64)
        __pyx_t_23 = __pyx_f_7questdb_7_client__raise_temporal_out_of_range(__pyx_v_col_name, __pyx_v_r, __pyx_v_i64); if (unlikely(__pyx_t_23 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 2964, __pyx_L1_error)
+2965:             days = micros // _MICROS_PER_DAY
      if (unlikely(__pyx_v_7questdb_7_client__MICROS_PER_DAY == 0)) {
        PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
        __PYX_ERR(2, 2965, __pyx_L1_error)
      }
      else if (sizeof(int64_t) == sizeof(long) && (!(((int64_t)-1) > 0)) && unlikely(__pyx_v_7questdb_7_client__MICROS_PER_DAY == (int64_t)-1)  && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_micros))) {
        PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
        __PYX_ERR(2, 2965, __pyx_L1_error)
      }
      __pyx_v_days = __Pyx_div_int64_t(__pyx_v_micros, __pyx_v_7questdb_7_client__MICROS_PER_DAY, 0);
+2966:             rem = micros - days * _MICROS_PER_DAY
      __pyx_v_rem = (__pyx_v_micros - (__pyx_v_days * __pyx_v_7questdb_7_client__MICROS_PER_DAY));
+2967:             secs = rem // 1_000_000
      __pyx_v_secs = __Pyx_div_int64_t(__pyx_v_rem, 0xF4240, 1);
+2968:             out.append(_utc_datetime(
      __pyx_t_4 = __pyx_f_7questdb_7_client__utc_datetime(__pyx_v_days, ((int)__pyx_v_secs), ((int)(__pyx_v_rem - (__pyx_v_secs * 0xF4240)))); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2968, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_4); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2968, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_L74_continue:;
    }
 2969:                 days, <int>secs, <int>(rem - secs * 1_000_000)))
+2970:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2971: 
+2972:     if kind == <int>qwp_reader_column_kind_uuid:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_uuid));
  if (__pyx_t_2) {
/* … */
  }
 2973:         # Canonical RFC-4122 bytes, decoded the same way as
 2974:         # `_numpy_uuid_chunk`.
+2975:         uuid_cls = _uuid.UUID
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_uuid_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 2975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_UUID); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_uuid_cls = __pyx_t_9;
    __pyx_t_9 = 0;
+2976:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2977:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2978:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2978, __pyx_L1_error)
+2979:                 continue
        goto __pyx_L85_continue;
+2980:             memcpy(&hi, values + r * stride, 8)
      (void)(memcpy((&__pyx_v_hi), (__pyx_v_values + (__pyx_v_r * __pyx_v_stride)), 8));
+2981:             memcpy(&lo, values + r * stride + 8, 8)
      (void)(memcpy((&__pyx_v_lo), ((__pyx_v_values + (__pyx_v_r * __pyx_v_stride)) + 8), 8));
+2982:             hi = bswap64(hi)
      __pyx_v_hi = __pyx_f_7questdb_7_client_bswap64(__pyx_v_hi);
+2983:             lo = bswap64(lo)
      __pyx_v_lo = __pyx_f_7questdb_7_client_bswap64(__pyx_v_lo);
+2984:             out.append(uuid_cls(int=((<object>hi) << 64) | (<object>lo)))
      __pyx_t_4 = NULL;
      __Pyx_INCREF(__pyx_v_uuid_cls);
      __pyx_t_7 = __pyx_v_uuid_cls; 
      __pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_hi); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = PyNumber_Lshift(__pyx_t_1, __pyx_mstate_global->__pyx_int_64); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 2984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyLong_From_uint64_t(__pyx_v_lo); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_15 = PyNumber_Or(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 2984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_20 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_4);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_20 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, NULL};
        __pyx_t_1 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2984, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_int, __pyx_t_15, __pyx_t_1, __pyx_callargs+1, 0) < (0)) __PYX_ERR(2, 2984, __pyx_L1_error)
        __pyx_t_9 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_20, (1-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2984, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_9); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2984, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_L85_continue:;
    }
+2985:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2986: 
+2987:     if kind == <int>qwp_reader_column_kind_long256:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_long256));
  if (__pyx_t_2) {
/* … */
  }
+2988:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+2989:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+2990:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2990, __pyx_L1_error)
+2991:                 continue
        goto __pyx_L89_continue;
+2992:             out.append(int.from_bytes(
      __pyx_t_7 = ((PyObject *)(&PyLong_Type));
      __Pyx_INCREF(__pyx_t_7);
/* … */
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_9); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 2992, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_L89_continue:;
    }
+2993:                 PyBytes_FromStringAndSize(
      __pyx_t_1 = PyBytes_FromStringAndSize(((char const *)(__pyx_v_values + (__pyx_v_r * __pyx_v_stride))), 32); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2993, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_20 = 0;
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_1, __pyx_mstate_global->__pyx_n_u_little};
        __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_bytes, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2992, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
 2994:                     <const char*>(values + r * stride), 32),
 2995:                 'little'))
+2996:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 2997: 
+2998:     if kind in _DECIMAL_PRECISION:
  __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_kind); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 2998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_DECIMAL_PRECISION); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_9, __pyx_t_1, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 2998, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
 2999:         # Build from a string so the scale (and its trailing zeros) is
 3000:         # preserved: `Decimal(unscaled) / 10**scale` would normalise it away.
+3001:         decimal_cls = Decimal
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_Decimal); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3001, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_decimal_cls = __pyx_t_1;
    __pyx_t_1 = 0;
+3002:         scale = cd.decimal_scale
    __pyx_t_24 = __pyx_v_cd.decimal_scale;
    __pyx_v_scale = __pyx_t_24;
+3003:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+3004:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+3005:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 3005, __pyx_L1_error)
+3006:                 continue
        goto __pyx_L93_continue;
+3007:             unscaled = int.from_bytes(
      __pyx_t_9 = ((PyObject *)(&PyLong_Type));
      __Pyx_INCREF(__pyx_t_9);
+3008:                 PyBytes_FromStringAndSize(
      __pyx_t_7 = PyBytes_FromStringAndSize(((char const *)(__pyx_v_values + (__pyx_v_r * __pyx_v_stride))), ((Py_ssize_t)__pyx_v_stride)); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3008, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
 3009:                     <const char*>(values + r * stride), <Py_ssize_t>stride),
+3010:                 'little', signed=True)
      __pyx_t_20 = 0;
      {
        PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_9, __pyx_t_7, __pyx_mstate_global->__pyx_n_u_little};
        __pyx_t_15 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3007, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_signed, Py_True, __pyx_t_15, __pyx_callargs+3, 0) < (0)) __PYX_ERR(2, 3007, __pyx_L1_error)
        __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_from_bytes, __pyx_callargs+__pyx_t_20, (3-__pyx_t_20) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_15);
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3007, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_unscaled, __pyx_t_1);
      __pyx_t_1 = 0;
+3011:             out.append(decimal_cls(f'{unscaled}e{-scale}'))
      __pyx_t_15 = NULL;
      __Pyx_INCREF(__pyx_v_decimal_cls);
      __pyx_t_7 = __pyx_v_decimal_cls; 
      __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_unscaled, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3011, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_4 = __Pyx_PyUnicode_From_int((-__pyx_v_scale), 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3011, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8[0] = __pyx_t_9;
      __pyx_t_8[1] = __pyx_mstate_global->__pyx_n_u_e;
      __pyx_t_8[2] = __pyx_t_4;
      __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 1 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9));
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3011, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_20 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_15);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_15);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_20 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_t_5};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_20, (2-__pyx_t_20) | (__pyx_t_20*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3011, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 3011, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_L93_continue:;
    }
+3012:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 3013: 
+3014:     if kind == <int>qwp_reader_column_kind_geohash:
  __pyx_t_2 = (__pyx_v_kind == ((int)qwp_reader_column_kind_geohash));
  if (__pyx_t_2) {
/* … */
  }
+3015:         bits = cd.geohash_precision_bits
    __pyx_t_25 = __pyx_v_cd.geohash_precision_bits;
    __pyx_v_bits = __pyx_t_25;
+3016:         if stride < 1 or stride > 8 or bits < 1 or bits > 60:
    __pyx_t_3 = (__pyx_v_stride < 1);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L98_bool_binop_done;
    }
    __pyx_t_3 = (__pyx_v_stride > 8);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L98_bool_binop_done;
    }
    __pyx_t_3 = (__pyx_v_bits < 1);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L98_bool_binop_done;
    }
    __pyx_t_3 = (__pyx_v_bits > 60);
    __pyx_t_2 = __pyx_t_3;
    __pyx_L98_bool_binop_done:;
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+3017:             raise QuestDBError(
      __pyx_t_7 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3017, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
+3018:                 QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3018, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3018, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+3019:                 f'column {col_name!r}: corrupt geohash column (stride '
      __pyx_t_15 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_col_name), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3019, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
/* … */
      __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_26, 7, 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15) + 33 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 6, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_15));
      if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 3019, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
        assert(__pyx_t_7);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_4, __pyx_t_16};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3017, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(2, 3017, __pyx_L1_error)
+3020:                 f'{stride}, precision {bits} bits)')
      __pyx_t_9 = __Pyx_PyUnicode_From_size_t(__pyx_v_stride, 0, ' ', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3020, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_17 = __Pyx_PyUnicode_From_int(__pyx_v_bits, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3020, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __pyx_t_26[0] = __pyx_mstate_global->__pyx_kp_u_column_3;
      __pyx_t_26[1] = __pyx_t_15;
      __pyx_t_26[2] = __pyx_mstate_global->__pyx_kp_u_corrupt_geohash_column_stride;
      __pyx_t_26[3] = __pyx_t_9;
      __pyx_t_26[4] = __pyx_mstate_global->__pyx_kp_u_precision_2;
      __pyx_t_26[5] = __pyx_t_17;
      __pyx_t_26[6] = __pyx_mstate_global->__pyx_kp_u_bits_2;
+3021:         for r in range(row_count):
    __pyx_t_10 = __pyx_v_row_count;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_r = __pyx_t_12;
+3022:             if _cell_is_null(validity, r):
      __pyx_t_2 = __pyx_f_7questdb_7_client__cell_is_null(__pyx_v_validity, __pyx_v_r);
      if (__pyx_t_2) {
/* … */
      }
+3023:                 out.append(None)
        __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, Py_None); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 3023, __pyx_L1_error)
+3024:                 continue
        goto __pyx_L102_continue;
+3025:             u64 = 0
      __pyx_v_u64 = 0;
+3026:             memcpy(&u64, values + r * stride, stride)
      (void)(memcpy((&__pyx_v_u64), (__pyx_v_values + (__pyx_v_r * __pyx_v_stride)), __pyx_v_stride));
+3027:             out.append(_geohash_text(u64, bits))
      __pyx_t_1 = __pyx_f_7questdb_7_client__geohash_text(__pyx_v_u64, __pyx_v_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3027, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_out, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(2, 3027, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_L102_continue:;
    }
+3028:         return out
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;
 3029: 
+3030:     raise QuestDBError(
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 3030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
+3031:         QuestDBErrorCode.InvalidApiCall,
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3031, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3031, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 3032:         'row egress does not support column kind 0x{:02X} yet; use '
+3033:         'to_arrow() / to_pandas() for this result'.format(kind))
  __pyx_t_17 = __pyx_mstate_global->__pyx_kp_u_row_egress_does_not_support_colu;
  __Pyx_INCREF(__pyx_t_17);
  __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_kind); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3033, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_t_9};
    __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_format, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_10 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_16))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_16);
    assert(__pyx_t_5);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_16, __pyx__function);
    __pyx_t_10 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_7, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3030, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(2, 3030, __pyx_L1_error)
 3034: 
 3035: 
+3036: cdef list _row_batch_decode(
static PyObject *__pyx_f_7questdb_7_client__row_batch_decode(struct qwp_reader_batch const *__pyx_v_batch, PyObject *__pyx_v_col_names, PyObject *__pyx_v_col_kinds, struct __pyx_obj_7questdb_7_client__SymbolStrings *__pyx_v_symbols, PyObject *__pyx_v_np) {
  questdb_error *__pyx_v_err;
  struct qwp_reader_symbol_dict __pyx_v_sd;
  struct qwp_reader_symbol_dict const *__pyx_v_sd_ptr;
  size_t __pyx_v_row_count;
  size_t __pyx_v_n_cols;
  size_t __pyx_v_col_idx;
  PyObject *__pyx_v_columns = NULL;
  CYTHON_UNUSED size_t __pyx_8genexpr7__pyx_v__;
  size_t __pyx_8genexpr8__pyx_v_col_idx;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._row_batch_decode", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_columns);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3037:         const qwp_reader_batch* batch,
 3038:         list col_names,
 3039:         list col_kinds,
 3040:         _SymbolStrings symbols,
 3041:         object np):
 3042:     """Decode a whole batch into a list of row tuples.
 3043: 
 3044:     Must run while `batch` is still the cursor's current batch, i.e. under
 3045:     the caller's lock and pin, before the next
 3046:     `qwp_reader_cursor_next_batch`.
 3047:     """
+3048:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 3049:     cdef qwp_reader_symbol_dict sd
+3050:     cdef const qwp_reader_symbol_dict* sd_ptr = NULL
  __pyx_v_sd_ptr = NULL;
+3051:     cdef size_t row_count = qwp_reader_batch_row_count(batch)
  __pyx_v_row_count = qwp_reader_batch_row_count(__pyx_v_batch);
+3052:     cdef size_t n_cols = <size_t>len(col_names)
  if (unlikely(__pyx_v_col_names == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 3052, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_col_names); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3052, __pyx_L1_error)
  __pyx_v_n_cols = ((size_t)__pyx_t_1);
 3053:     cdef size_t col_idx
 3054: 
+3055:     if row_count == 0:
  __pyx_t_2 = (__pyx_v_row_count == 0);
  if (__pyx_t_2) {
/* … */
  }
+3056:         return []
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;
+3057:     if n_cols == 0:
  __pyx_t_2 = (__pyx_v_n_cols == 0);
  if (__pyx_t_2) {
/* … */
  }
 3058:         # A batch with rows but no columns cannot be expressed as tuples of
 3059:         # column values; emit empty tuples so the row count still shows.
+3060:         return [() for _ in range(row_count)]
    __Pyx_XDECREF(__pyx_r);
    { /* enter inner scope */
      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3060, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __pyx_v_row_count;
      __pyx_t_5 = __pyx_t_4;
      for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
        __pyx_8genexpr7__pyx_v__ = __pyx_t_6;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_mstate_global->__pyx_empty_tuple))) __PYX_ERR(2, 3060, __pyx_L1_error)
      }
    } /* exit inner scope */
    __pyx_r = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;
 3061: 
+3062:     for col_idx in range(n_cols):
  __pyx_t_4 = __pyx_v_n_cols;
  __pyx_t_5 = __pyx_t_4;
  for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
    __pyx_v_col_idx = __pyx_t_6;
+3063:         if col_kinds[col_idx] == <int>qwp_reader_column_kind_symbol:
    if (unlikely(__pyx_v_col_kinds == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 3063, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_GetItemInt_List(__pyx_v_col_kinds, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3063, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyLong_From_int(((int)qwp_reader_column_kind_symbol)); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3063, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = PyObject_RichCompare(__pyx_t_3, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3063, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 3063, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (__pyx_t_2) {
/* … */
    }
  }
  __pyx_L8_break:;
+3064:             _reader_check(
      __pyx_t_9 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_symbol_dict(__pyx_v_batch, (&__pyx_v_sd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_symbol_dict); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 3064, __pyx_L1_error)
 3065:                 qwp_reader_batch_symbol_dict(batch, &sd, &err), &err,
 3066:                 'qwp_reader_batch_symbol_dict')
+3067:             symbols._reserve(sd.entry_count)
      __pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client__SymbolStrings *)__pyx_v_symbols->__pyx_vtab)->_reserve(__pyx_v_symbols, __pyx_v_sd.entry_count); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(2, 3067, __pyx_L1_error)
+3068:             sd_ptr = &sd
      __pyx_v_sd_ptr = (&__pyx_v_sd);
+3069:             break
      goto __pyx_L8_break;
 3070: 
+3071:     columns = [
  { /* enter inner scope */
    __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3071, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
+3072:         _row_column_values(
      __pyx_t_3 = __pyx_f_7questdb_7_client__row_column_values(__pyx_v_batch, __pyx_8genexpr8__pyx_v_col_idx, ((PyObject*)__pyx_t_7), ((int)__pyx_t_9), __pyx_v_row_count, __pyx_v_sd_ptr, __pyx_v_symbols, __pyx_v_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3072, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_8, (PyObject*)__pyx_t_3))) __PYX_ERR(2, 3071, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
  } /* exit inner scope */
  __pyx_v_columns = ((PyObject*)__pyx_t_8);
  __pyx_t_8 = 0;
+3073:             batch, col_idx, col_names[col_idx], <int>col_kinds[col_idx],
      if (unlikely(__pyx_v_col_names == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 3073, __pyx_L1_error)
      }
      __pyx_t_7 = __Pyx_GetItemInt_List(__pyx_v_col_names, __pyx_8genexpr8__pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3073, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (!(likely(PyUnicode_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_7))) __PYX_ERR(2, 3073, __pyx_L1_error)
      if (unlikely(__pyx_v_col_kinds == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 3073, __pyx_L1_error)
      }
      __pyx_t_3 = __Pyx_GetItemInt_List(__pyx_v_col_kinds, __pyx_8genexpr8__pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3073, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyLong_As_int(__pyx_t_3); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 3073, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3074:             row_count, sd_ptr, symbols, np)
+3075:         for col_idx in range(n_cols)
    __pyx_t_4 = __pyx_v_n_cols;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_8genexpr8__pyx_v_col_idx = __pyx_t_6;
 3076:     ]
 3077:     # `zip` builds the tuples in C; building them row-by-row in Python is
 3078:     # measurably slower for the same result.
+3079:     return list(zip(*columns))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_8 = PySequence_Tuple(__pyx_v_columns); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PySequence_ListKeepNew(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = ((PyObject*)__pyx_t_8);
  __pyx_t_8 = 0;
  goto __pyx_L0;
 3080: 
 3081: 
+3082: cdef tuple _open_row_stream(_CursorHandle handle):
static PyObject *__pyx_f_7questdb_7_client__open_row_stream(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle) {
  struct qwp_reader_cursor *__pyx_v_cursor;
  questdb_error *__pyx_v_err;
  struct qwp_reader_batch const *__pyx_v_batch;
  int __pyx_v_seen_seq;
  PyObject *__pyx_v_col_names = 0;
  PyObject *__pyx_v_col_kinds = 0;
  PyObject *__pyx_v_col_scales = 0;
  PyObject *__pyx_v_col_precision = 0;
  int __pyx_v_have_schema;
  int __pyx_v_terminal;
  PyObject *__pyx_v_np = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_columns = NULL;
  PyObject *__pyx_v_rows_iter = NULL;
  Py_ssize_t __pyx_8genexpr9__pyx_v_i;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("questdb._client._open_row_stream", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_col_names);
  __Pyx_XDECREF(__pyx_v_col_kinds);
  __Pyx_XDECREF(__pyx_v_col_scales);
  __Pyx_XDECREF(__pyx_v_col_precision);
  __Pyx_XDECREF(__pyx_v_np);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_columns);
  __Pyx_XDECREF(__pyx_v_rows_iter);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_75generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 3083:     """Start a row stream: returns ``(columns, row_iterator)``.
 3084: 
 3085:     Batches are pulled up to the first one carrying rows, so the column list
 3086:     is known before any row is consumed — a DB-API caller needs
 3087:     `description` before `fetchall`. That batch is left undecoded on the
 3088:     cursor as the handle's `_pending_batch` until the iterator's first step,
 3089:     so a schema probe neither pays for the rows nor fails on their values.
 3090:     A result with no rows at all (a `LIMIT 0` probe, an empty SELECT) is
 3091:     read through to its terminal, so the connection goes back to the pool
 3092:     even if the caller never iterates.
 3093:     """
 3094:     cdef qwp_reader_cursor* cursor
+3095:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 3096:     cdef const qwp_reader_batch* batch
 3097:     cdef int seen_seq
+3098:     cdef list col_names = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_names = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3099:     cdef list col_kinds = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3099, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_kinds = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3100:     cdef list col_scales = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_scales = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3101:     cdef list col_precision = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_precision = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3102:     cdef bint have_schema = False
  __pyx_v_have_schema = 0;
+3103:     cdef bint terminal = False
  __pyx_v_terminal = 0;
+3104:     import numpy as np
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numpy, 0, 0, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3104, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_np = __pyx_t_1;
  __pyx_t_1 = 0;
 3105: 
+3106:     if handle is None or not handle._is_live():
  __pyx_t_4 = (((PyObject *)__pyx_v_handle) == Py_None);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_is_live(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3106, __pyx_L1_error)
  __pyx_t_5 = (!__pyx_t_4);
  __pyx_t_3 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+3107:         raise QuestDBError(QuestDBErrorCode.InvalidApiCall, 'cursor is closed')
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3107, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3107, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3107, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_9, __pyx_mstate_global->__pyx_kp_u_cursor_is_closed};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3107, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 3107, __pyx_L1_error)
+3108:     seen_seq = handle._reset_sequence()
  __pyx_t_11 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_reset_sequence(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3108, __pyx_L1_error)
  __pyx_v_seen_seq = __pyx_t_11;
 3109: 
+3110:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L6_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L8_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_XGIVEREF(__pyx_t_13);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_12, __pyx_t_13);
    goto __pyx_L1_error;
    __pyx_L10_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_XGIVEREF(__pyx_t_13);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_12, __pyx_t_13);
    goto __pyx_L0;
  }
+3111:         while True:
      while (1) {
+3112:             with handle._lock:
        /*with:*/ {
          __pyx_t_14 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 3112, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_7 = NULL;
          __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3112, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_10 = 1;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_9))) {
            __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
            assert(__pyx_t_7);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
            __pyx_t_10 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
            __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (1-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3112, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          /*try:*/ {
            {
              /*try:*/ {
/* … */
              }
              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              goto __pyx_L27_try_end;
              __pyx_L20_error:;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              /*except:*/ {
                __Pyx_AddTraceback("questdb._client._open_row_stream", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_20, &__pyx_t_6) < 0) __PYX_ERR(2, 3112, __pyx_L22_except_error)
                __Pyx_XGOTREF(__pyx_t_1);
                __Pyx_XGOTREF(__pyx_t_20);
                __Pyx_XGOTREF(__pyx_t_6);
                __pyx_t_9 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_20, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3112, __pyx_L22_except_error)
                __Pyx_GOTREF(__pyx_t_9);
                __pyx_t_28 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_9, NULL);
                __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                if (unlikely(!__pyx_t_28)) __PYX_ERR(2, 3112, __pyx_L22_except_error)
                __Pyx_GOTREF(__pyx_t_28);
                __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_28);
                __Pyx_DECREF(__pyx_t_28); __pyx_t_28 = 0;
                if (__pyx_t_3 < (0)) __PYX_ERR(2, 3112, __pyx_L22_except_error)
                __pyx_t_5 = (!__pyx_t_3);
                if (unlikely(__pyx_t_5)) {
                  __Pyx_GIVEREF(__pyx_t_1);
                  __Pyx_GIVEREF(__pyx_t_20);
                  __Pyx_XGIVEREF(__pyx_t_6);
                  __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_20, __pyx_t_6);
                  __pyx_t_1 = 0;  __pyx_t_20 = 0;  __pyx_t_6 = 0; 
                  __PYX_ERR(2, 3112, __pyx_L22_except_error)
                }
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                goto __pyx_L21_exception_handled;
              }
              __pyx_L22_except_error:;
              __Pyx_XGIVEREF(__pyx_t_15);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
              goto __pyx_L6_error;
              __pyx_L25_try_break:;
              __Pyx_XGIVEREF(__pyx_t_15);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
              goto __pyx_L16_break;
              __pyx_L26_try_continue:;
              __Pyx_XGIVEREF(__pyx_t_15);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
              goto __pyx_L15_continue;
              __pyx_L21_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_15);
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
              __pyx_L27_try_end:;
            }
          }
          /*finally:*/ {
            /*normal exit:*/{
              if (__pyx_t_14) {
                __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_mstate_global->__pyx_tuple[3], NULL);
                __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3112, __pyx_L6_error)
                __Pyx_GOTREF(__pyx_t_17);
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
              }
              goto __pyx_L19;
            }
            __pyx_L15_continue: {
              if (__pyx_t_14) {
                __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_mstate_global->__pyx_tuple[3], NULL);
                __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3112, __pyx_L6_error)
                __Pyx_GOTREF(__pyx_t_17);
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
              }
              goto __pyx_L12_continue;
            }
            __pyx_L16_break: {
              if (__pyx_t_14) {
                __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_mstate_global->__pyx_tuple[3], NULL);
                __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3112, __pyx_L6_error)
                __Pyx_GOTREF(__pyx_t_17);
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
              }
              goto __pyx_L13_break;
            }
            __pyx_L19:;
          }
          goto __pyx_L55;
          __pyx_L14_error:;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          goto __pyx_L6_error;
          __pyx_L55:;
        }
+3113:                 cursor = handle._cursor
                __pyx_t_18 = __pyx_v_handle->_cursor;
                __pyx_v_cursor = __pyx_t_18;
+3114:                 if cursor == NULL:
                __pyx_t_3 = (__pyx_v_cursor == NULL);
                if (unlikely(__pyx_t_3)) {
/* … */
                }
+3115:                     raise QuestDBError(
                  __pyx_t_9 = NULL;
                  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3115, __pyx_L20_error)
                  __Pyx_GOTREF(__pyx_t_7);
+3116:                         QuestDBErrorCode.InvalidApiCall, 'cursor is closed')
                  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3116, __pyx_L20_error)
                  __Pyx_GOTREF(__pyx_t_6);
                  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3116, __pyx_L20_error)
                  __Pyx_GOTREF(__pyx_t_8);
                  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
                  __pyx_t_10 = 1;
                  #if CYTHON_UNPACK_METHODS
                  if (unlikely(PyMethod_Check(__pyx_t_7))) {
                    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
                    assert(__pyx_t_9);
                    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
                    __Pyx_INCREF(__pyx_t_9);
                    __Pyx_INCREF(__pyx__function);
                    __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
                    __pyx_t_10 = 0;
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_8, __pyx_mstate_global->__pyx_kp_u_cursor_is_closed};
                    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
                    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3115, __pyx_L20_error)
                    __Pyx_GOTREF(__pyx_t_1);
                  }
                  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __PYX_ERR(2, 3115, __pyx_L20_error)
+3117:                 with nogil:
                {
                    PyThreadState * _save;
                    _save = PyEval_SaveThread();
                    __Pyx_FastGIL_Remember();
                    /*try:*/ {
/* … */
                    /*finally:*/ {
                      /*normal exit:*/{
                        __Pyx_FastGIL_Forget();
                        PyEval_RestoreThread(_save);
                        goto __pyx_L33;
                      }
                      __pyx_L33:;
                    }
                }
+3118:                     batch = qwp_reader_cursor_next_batch(cursor, &err)
                      __pyx_v_batch = qwp_reader_cursor_next_batch(__pyx_v_cursor, (&__pyx_v_err));
                    }
+3119:                 if err == NULL:
                __pyx_t_3 = (__pyx_v_err == NULL);
                if (__pyx_t_3) {
/* … */
                }
+3120:                     _oidc_raise_unscheduled_main()
                  __pyx_t_19 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_19 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3120, __pyx_L20_error)
+3121:                 handle._pin()
                ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_pin(__pyx_v_handle);
+3122:                 try:
                /*try:*/ {
+3123:                     if handle._reset_seq != seen_seq:
                  __pyx_t_3 = (__pyx_v_handle->_reset_seq != __pyx_v_seen_seq);
                  if (__pyx_t_3) {
/* … */
                  }
 3124:                         # Mid-query failover before any row was handed out:
 3125:                         # the replay restarts at batch 0.
+3126:                         seen_seq = handle._reset_seq
                    __pyx_t_11 = __pyx_v_handle->_reset_seq;
                    __pyx_v_seen_seq = __pyx_t_11;
+3127:                         have_schema = False
                    __pyx_v_have_schema = 0;
+3128:                         col_names = []
                    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3128, __pyx_L38_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF_SET(__pyx_v_col_names, ((PyObject*)__pyx_t_1));
                    __pyx_t_1 = 0;
+3129:                         col_kinds = []
                    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3129, __pyx_L38_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF_SET(__pyx_v_col_kinds, ((PyObject*)__pyx_t_1));
                    __pyx_t_1 = 0;
+3130:                         col_scales = []
                    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3130, __pyx_L38_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF_SET(__pyx_v_col_scales, ((PyObject*)__pyx_t_1));
                    __pyx_t_1 = 0;
+3131:                         col_precision = []
                    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3131, __pyx_L38_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF_SET(__pyx_v_col_precision, ((PyObject*)__pyx_t_1));
                    __pyx_t_1 = 0;
+3132:                         if batch == NULL and err == NULL:
                    __pyx_t_5 = (__pyx_v_batch == NULL);
                    if (__pyx_t_5) {
                    } else {
                      __pyx_t_3 = __pyx_t_5;
                      goto __pyx_L42_bool_binop_done;
                    }
                    __pyx_t_5 = (__pyx_v_err == NULL);
                    __pyx_t_3 = __pyx_t_5;
                    __pyx_L42_bool_binop_done:;
                    if (__pyx_t_3) {
/* … */
                    }
+3133:                             continue
                      goto __pyx_L35_continue;
+3134:                     if batch == NULL:
                  __pyx_t_3 = (__pyx_v_batch == NULL);
                  if (__pyx_t_3) {
/* … */
                  }
+3135:                         if err != NULL:
                    __pyx_t_3 = (__pyx_v_err != NULL);
                    if (unlikely(__pyx_t_3)) {
/* … */
                    }
+3136:                             raise _reader_err_to_py(err)
                      __pyx_t_1 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3136, __pyx_L38_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                      __PYX_ERR(2, 3136, __pyx_L38_error)
 3137:                         # A non-SELECT ships no RESULT_BATCH: no schema, no
 3138:                         # rows; `exec_done` carries the outcome.
+3139:                         terminal = True
                    __pyx_v_terminal = 1;
+3140:                         break
                    goto __pyx_L36_break;
+3141:                     if not have_schema:
                  __pyx_t_3 = (!__pyx_v_have_schema);
                  if (__pyx_t_3) {
/* … */
                  }
+3142:                         col_names, col_kinds, col_scales, col_precision, _ = (
                    if (!(likely(PyList_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_7))) __PYX_ERR(2, 3142, __pyx_L38_error)
                    if (!(likely(PyList_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_8))) __PYX_ERR(2, 3142, __pyx_L38_error)
                    if (!(likely(PyList_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_9))) __PYX_ERR(2, 3142, __pyx_L38_error)
                    if (!(likely(PyList_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_6))) __PYX_ERR(2, 3142, __pyx_L38_error)
                    __Pyx_DECREF_SET(__pyx_v_col_names, ((PyObject*)__pyx_t_7));
                    __pyx_t_7 = 0;
                    __Pyx_DECREF_SET(__pyx_v_col_kinds, ((PyObject*)__pyx_t_8));
                    __pyx_t_8 = 0;
                    __Pyx_DECREF_SET(__pyx_v_col_scales, ((PyObject*)__pyx_t_9));
                    __pyx_t_9 = 0;
                    __Pyx_DECREF_SET(__pyx_v_col_precision, ((PyObject*)__pyx_t_6));
                    __pyx_t_6 = 0;
                    __Pyx_XDECREF_SET(__pyx_v__, __pyx_t_20);
                    __pyx_t_20 = 0;
+3143:                             _numpy_extract_meta(batch))
                    __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_extract_meta(__pyx_v_batch); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3143, __pyx_L38_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    if (likely(__pyx_t_1 != Py_None)) {
                      PyObject* sequence = __pyx_t_1;
                      Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
                      if (unlikely(size != 5)) {
                        if (size > 5) __Pyx_RaiseTooManyValuesError(5);
                        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                        __PYX_ERR(2, 3142, __pyx_L38_error)
                      }
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0);
                      __Pyx_INCREF(__pyx_t_7);
                      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1);
                      __Pyx_INCREF(__pyx_t_8);
                      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 2);
                      __Pyx_INCREF(__pyx_t_9);
                      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3);
                      __Pyx_INCREF(__pyx_t_6);
                      __pyx_t_20 = PyTuple_GET_ITEM(sequence, 4);
                      __Pyx_INCREF(__pyx_t_20);
                      #else
                      {
                        Py_ssize_t i;
                        PyObject** temps[5] = {&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_6,&__pyx_t_20};
                        for (i=0; i < 5; i++) {
                          PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(2, 3142, __pyx_L38_error)
                          __Pyx_GOTREF(item);
                          *(temps[i]) = item;
                        }
                      }
                      #endif
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    } else {
                      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 3142, __pyx_L38_error)
                    }
+3144:                         have_schema = True
                    __pyx_v_have_schema = 1;
+3145:                     if qwp_reader_batch_row_count(batch) == 0:
                  __pyx_t_3 = (qwp_reader_batch_row_count(__pyx_v_batch) == 0);
                  if (__pyx_t_3) {
/* … */
                  }
+3146:                         continue
                    goto __pyx_L35_continue;
+3147:                     handle._pending_batch = batch
                  __pyx_v_handle->_pending_batch = __pyx_v_batch;
                }
 3148:                 finally:
+3149:                     handle._unpin()
                /*finally:*/ {
                  /*normal exit:*/{
                    ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_v_handle);
                    goto __pyx_L39;
                  }
                  __pyx_L38_error:;
                  /*exception exit:*/{
                    __Pyx_PyThreadState_declare
                    __Pyx_PyThreadState_assign
                    __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
                    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
                    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
                    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
                     __Pyx_ExceptionSwap(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28);
                    if ( unlikely(__Pyx_GetException(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25) < 0)) __Pyx_ErrFetch(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
                    __Pyx_XGOTREF(__pyx_t_23);
                    __Pyx_XGOTREF(__pyx_t_24);
                    __Pyx_XGOTREF(__pyx_t_25);
                    __Pyx_XGOTREF(__pyx_t_26);
                    __Pyx_XGOTREF(__pyx_t_27);
                    __Pyx_XGOTREF(__pyx_t_28);
                    __pyx_t_11 = __pyx_lineno; __pyx_t_21 = __pyx_clineno; __pyx_t_22 = __pyx_filename;
                    {
                      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_v_handle);
                    }
                    __Pyx_XGIVEREF(__pyx_t_26);
                    __Pyx_XGIVEREF(__pyx_t_27);
                    __Pyx_XGIVEREF(__pyx_t_28);
                    __Pyx_ExceptionReset(__pyx_t_26, __pyx_t_27, __pyx_t_28);
                    __Pyx_XGIVEREF(__pyx_t_23);
                    __Pyx_XGIVEREF(__pyx_t_24);
                    __Pyx_XGIVEREF(__pyx_t_25);
                    __Pyx_ErrRestore(__pyx_t_23, __pyx_t_24, __pyx_t_25);
                    __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
                    __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_21; __pyx_filename = __pyx_t_22;
                    goto __pyx_L20_error;
                  }
                  __pyx_L35_continue: {
                    ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_v_handle);
                    goto __pyx_L26_try_continue;
                  }
                  __pyx_L36_break: {
                    ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_v_handle);
                    goto __pyx_L25_try_break;
                  }
                  __pyx_L39:;
                }
+3150:             break
        goto __pyx_L13_break;
        __pyx_L12_continue:;
      }
      __pyx_L13_break:;
 3151: 
+3152:         columns = [
      { /* enter inner scope */
        __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3152, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_6);
+3153:             (col_names[i],
          if (unlikely(__pyx_v_col_names == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(2, 3153, __pyx_L6_error)
          }
          __pyx_t_20 = __Pyx_GetItemInt_List(__pyx_v_col_names, __pyx_8genexpr9__pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 3153, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_20);
/* … */
          __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3153, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_GIVEREF(__pyx_t_20);
          if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_20) != (0)) __PYX_ERR(2, 3153, __pyx_L6_error);
          __Pyx_GIVEREF(__pyx_t_8);
          if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8) != (0)) __PYX_ERR(2, 3153, __pyx_L6_error);
          __pyx_t_20 = 0;
          __pyx_t_8 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_9))) __PYX_ERR(2, 3152, __pyx_L6_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
      } /* exit inner scope */
      __pyx_v_columns = ((PyObject*)__pyx_t_6);
      __pyx_t_6 = 0;
+3154:              _questdb_type_name(
          __pyx_t_8 = __pyx_f_7questdb_7_client__questdb_type_name(((int)__pyx_t_21), __pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3154, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3155:                  <int>col_kinds[i], col_scales[i], col_precision[i]))
          if (unlikely(__pyx_v_col_kinds == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(2, 3155, __pyx_L6_error)
          }
          __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_col_kinds, __pyx_8genexpr9__pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3155, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_21 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_21 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 3155, __pyx_L6_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(__pyx_v_col_scales == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(2, 3155, __pyx_L6_error)
          }
          __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_col_scales, __pyx_8genexpr9__pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3155, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely(__pyx_v_col_precision == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(2, 3155, __pyx_L6_error)
          }
          __pyx_t_9 = __Pyx_GetItemInt_List(__pyx_v_col_precision, __pyx_8genexpr9__pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3155, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_9);
+3156:             for i in range(len(col_names))
        if (unlikely(__pyx_v_col_names == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
          __PYX_ERR(2, 3156, __pyx_L6_error)
        }
        __pyx_t_29 = __Pyx_PyList_GET_SIZE(__pyx_v_col_names); if (unlikely(__pyx_t_29 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3156, __pyx_L6_error)
        __pyx_t_30 = __pyx_t_29;
        for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_30; __pyx_t_31+=1) {
          __pyx_8genexpr9__pyx_v_i = __pyx_t_31;
 3157:         ]
 3158: 
+3159:         if terminal:
      if (__pyx_v_terminal) {
/* … */
      }
+3160:             _mark_reader_drained(handle)
        __pyx_t_19 = __pyx_f_7questdb_7_client__mark_reader_drained(__pyx_v_handle); if (unlikely(__pyx_t_19 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3160, __pyx_L6_error)
+3161:             handle._free()
        ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_free(__pyx_v_handle);
+3162:             return (columns, iter(()))
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_6 = PyObject_GetIter(__pyx_mstate_global->__pyx_empty_tuple); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3162, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3162, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_v_columns);
        __Pyx_GIVEREF(__pyx_v_columns);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_columns) != (0)) __PYX_ERR(2, 3162, __pyx_L6_error);
        __Pyx_GIVEREF(__pyx_t_6);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_6) != (0)) __PYX_ERR(2, 3162, __pyx_L6_error);
        __pyx_t_6 = 0;
        __pyx_r = ((PyObject*)__pyx_t_9);
        __pyx_t_9 = 0;
        goto __pyx_L10_try_return;
 3163: 
+3164:         rows_iter = _row_stream_iter(
      __pyx_t_6 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_row_stream_iter); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3164, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_8);
+3165:             handle, col_names, col_kinds, seen_seq, np)
      __pyx_t_20 = __Pyx_PyLong_From_int(__pyx_v_seen_seq); if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 3165, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_20);
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
        assert(__pyx_t_6);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[6] = {__pyx_t_6, ((PyObject *)__pyx_v_handle), __pyx_v_col_names, __pyx_v_col_kinds, __pyx_t_20, __pyx_v_np};
        __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_10, (6-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3164, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_9);
      }
      __pyx_v_rows_iter = __pyx_t_9;
      __pyx_t_9 = 0;
 3166:         # Prime it into its `try`, so dropping an iterator that was never
 3167:         # advanced still runs its `finally` and frees the cursor.
+3168:         next(rows_iter)
      __pyx_t_9 = __Pyx_PyIter_Next(__pyx_v_rows_iter); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3168, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3169:         return (columns, rows_iter)
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3169, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_v_columns);
      __Pyx_GIVEREF(__pyx_v_columns);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_columns) != (0)) __PYX_ERR(2, 3169, __pyx_L6_error);
      __Pyx_INCREF(__pyx_v_rows_iter);
      __Pyx_GIVEREF(__pyx_v_rows_iter);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_rows_iter) != (0)) __PYX_ERR(2, 3169, __pyx_L6_error);
      __pyx_r = ((PyObject*)__pyx_t_9);
      __pyx_t_9 = 0;
      goto __pyx_L10_try_return;
+3170:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._open_row_stream", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_20) < 0) __PYX_ERR(2, 3170, __pyx_L8_except_error)
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_20);
+3171:         handle._free()
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_free(__pyx_v_handle);
+3172:         raise
      __Pyx_GIVEREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_20);
      __Pyx_ErrRestoreWithState(__pyx_t_9, __pyx_t_8, __pyx_t_20);
      __pyx_t_9 = 0;  __pyx_t_8 = 0;  __pyx_t_20 = 0; 
      __PYX_ERR(2, 3172, __pyx_L8_except_error)
    }
 3173: 
 3174: 
+3175: def _row_stream_iter(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_74_row_stream_iter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_73_row_stream_iter, "Yield row tuples, starting with the handle's `_pending_batch`.\n\n    Only the batch being handed out is held as Python rows: each decoded\n    batch is dropped as soon as its rows are out, so the peak is one batch\n    of row tuples plus the one being decoded.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_74_row_stream_iter = {"_row_stream_iter", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_74_row_stream_iter, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_73_row_stream_iter};
static PyObject *__pyx_pw_7questdb_7_client_74_row_stream_iter(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  PyObject *__pyx_v_col_names = 0;
  PyObject *__pyx_v_col_kinds = 0;
  int __pyx_v_seen_seq;
  PyObject *__pyx_v_np = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_row_stream_iter (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_handle,&__pyx_mstate_global->__pyx_n_u_col_names,&__pyx_mstate_global->__pyx_n_u_col_kinds,&__pyx_mstate_global->__pyx_n_u_seen_seq,&__pyx_mstate_global->__pyx_n_u_np,0};
  PyObject* values[5] = {0,0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 3175, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(2, 3175, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(2, 3175, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 3175, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 3175, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3175, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_row_stream_iter", 0) < (0)) __PYX_ERR(2, 3175, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_row_stream_iter", 1, 5, 5, i); __PYX_ERR(2, 3175, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 5)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3175, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 3175, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 3175, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(2, 3175, __pyx_L3_error)
      values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(2, 3175, __pyx_L3_error)
    }
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)values[0]);
    __pyx_v_col_names = ((PyObject*)values[1]);
    __pyx_v_col_kinds = ((PyObject*)values[2]);
    __pyx_v_seen_seq = __Pyx_PyLong_As_int(values[3]); if (unlikely((__pyx_v_seen_seq == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 3179, __pyx_L3_error)
    __pyx_v_np = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_row_stream_iter", 1, 5, 5, __pyx_nargs); __PYX_ERR(2, 3175, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._row_stream_iter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_handle), __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle, 0, "handle", 0))) __PYX_ERR(2, 3176, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_col_names), (&PyList_Type), 1, "col_names", 1))) __PYX_ERR(2, 3177, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_col_kinds), (&PyList_Type), 1, "col_kinds", 1))) __PYX_ERR(2, 3178, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_73_row_stream_iter(__pyx_self, __pyx_v_handle, __pyx_v_col_names, __pyx_v_col_kinds, __pyx_v_seen_seq, __pyx_v_np);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_73_row_stream_iter(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle, PyObject *__pyx_v_col_names, PyObject *__pyx_v_col_kinds, int __pyx_v_seen_seq, PyObject *__pyx_v_np) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_3__row_stream_iter *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_3__row_stream_iter *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_3__row_stream_iter(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_3__row_stream_iter, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_3__row_stream_iter *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(2, 3175, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_handle = __pyx_v_handle;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_handle);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_handle);
  __pyx_cur_scope->__pyx_v_col_names = __pyx_v_col_names;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_col_names);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_col_names);
  __pyx_cur_scope->__pyx_v_col_kinds = __pyx_v_col_kinds;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_col_kinds);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_col_kinds);
  __pyx_cur_scope->__pyx_v_seen_seq = __pyx_v_seen_seq;
  __pyx_cur_scope->__pyx_v_np = __pyx_v_np;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_np);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_np);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_75generator1, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_row_stream_iter, __pyx_mstate_global->__pyx_n_u_row_stream_iter, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(2, 3175, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._row_stream_iter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_7questdb_7_client_75generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_row_stream_iter", 0);
  __pyx_L3_first_run:;
  if (unlikely(__pyx_sent_value != Py_None)) {
    if (unlikely(__pyx_sent_value)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started generator");
    __PYX_ERR(2, 3175, __pyx_L1_error)
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_27);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("_row_stream_iter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_74_row_stream_iter, 0, __pyx_mstate_global->__pyx_n_u_row_stream_iter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_row_stream_iter, __pyx_t_18) < (0)) __PYX_ERR(2, 3175, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_3__row_stream_iter {
  PyObject_HEAD
  struct qwp_reader_batch const *__pyx_v_batch;
  PyObject *__pyx_v_col_kinds;
  PyObject *__pyx_v_col_names;
  struct qwp_reader_cursor *__pyx_v_cursor;
  questdb_error *__pyx_v_err;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle;
  PyObject *__pyx_v_np;
  PyObject *__pyx_v_row;
  PyObject *__pyx_v_rows;
  int __pyx_v_seen_seq;
  struct __pyx_obj_7questdb_7_client__SymbolStrings *__pyx_v_symbols;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
  Py_ssize_t __pyx_t_4;
};

 3176:         _CursorHandle handle not None,
 3177:         list col_names,
 3178:         list col_kinds,
 3179:         int seen_seq,
 3180:         object np):
 3181:     """Yield row tuples, starting with the handle's `_pending_batch`.
 3182: 
 3183:     Only the batch being handed out is held as Python rows: each decoded
 3184:     batch is dropped as soon as its rows are out, so the peak is one batch
 3185:     of row tuples plus the one being decoded.
 3186:     """
 3187:     cdef qwp_reader_cursor* cursor
+3188:     cdef questdb_error* err = NULL
  __pyx_cur_scope->__pyx_v_err = NULL;
 3189:     cdef const qwp_reader_batch* batch
+3190:     cdef _SymbolStrings symbols = _SymbolStrings()
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__SymbolStrings, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3190, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __Pyx_GIVEREF((PyObject *)__pyx_t_1);
  __pyx_cur_scope->__pyx_v_symbols = ((struct __pyx_obj_7questdb_7_client__SymbolStrings *)__pyx_t_1);
  __pyx_t_1 = 0;
 3191:     cdef list rows
+3192:     try:
  /*try:*/ {
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L12_try_end;
      __pyx_L7_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
      __pyx_L9_except_error:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
      goto __pyx_L5_error;
      __pyx_L11_try_return:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
      goto __pyx_L4_return;
      __pyx_L12_try_end:;
    }
  }
+3193:         yield None
        __Pyx_INCREF(Py_None);
        __pyx_r = Py_None;
        __Pyx_XGIVEREF(__pyx_t_4);
        __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
        __Pyx_XGIVEREF(__pyx_t_5);
        __pyx_cur_scope->__pyx_t_1 = __pyx_t_5;
        __Pyx_XGIVEREF(__pyx_t_6);
        __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
        __Pyx_XGIVEREF(__pyx_r);
        __Pyx_RefNannyFinishContext();
        __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
        /* return from generator, yielding value */
        __pyx_generator->resume_label = 1;
        return __pyx_r;
        __pyx_L13_resume_from_yield:;
        __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
        __pyx_cur_scope->__pyx_t_0 = 0;
        __Pyx_XGOTREF(__pyx_t_4);
        __pyx_t_5 = __pyx_cur_scope->__pyx_t_1;
        __pyx_cur_scope->__pyx_t_1 = 0;
        __Pyx_XGOTREF(__pyx_t_5);
        __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
        __pyx_cur_scope->__pyx_t_2 = 0;
        __Pyx_XGOTREF(__pyx_t_6);
        if (unlikely(!__pyx_sent_value)) __PYX_ERR(2, 3193, __pyx_L7_error)
+3194:         with handle._lock:
        /*with:*/ {
          __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_cur_scope->__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3194, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_2 = NULL;
          __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_cur_scope->__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3194, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_3 = 1;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_8))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
            assert(__pyx_t_2);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
            __pyx_t_3 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
            __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3194, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          /*try:*/ {
            {
              /*try:*/ {
/* … */
              }
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              goto __pyx_L23_try_end;
              __pyx_L18_error:;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
              /*except:*/ {
                __Pyx_AddTraceback("questdb._client._row_stream_iter", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_15) < 0) __PYX_ERR(2, 3194, __pyx_L20_except_error)
                __Pyx_XGOTREF(__pyx_t_1);
                __Pyx_XGOTREF(__pyx_t_2);
                __Pyx_XGOTREF(__pyx_t_15);
                __pyx_t_8 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_2, __pyx_t_15); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3194, __pyx_L20_except_error)
                __Pyx_GOTREF(__pyx_t_8);
                __pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL);
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                if (unlikely(!__pyx_t_24)) __PYX_ERR(2, 3194, __pyx_L20_except_error)
                __Pyx_GOTREF(__pyx_t_24);
                __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_24);
                __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
                if (__pyx_t_13 < (0)) __PYX_ERR(2, 3194, __pyx_L20_except_error)
                __pyx_t_25 = (!__pyx_t_13);
                if (unlikely(__pyx_t_25)) {
                  __Pyx_GIVEREF(__pyx_t_1);
                  __Pyx_GIVEREF(__pyx_t_2);
                  __Pyx_XGIVEREF(__pyx_t_15);
                  __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_2, __pyx_t_15);
                  __pyx_t_1 = 0;  __pyx_t_2 = 0;  __pyx_t_15 = 0; 
                  __PYX_ERR(2, 3194, __pyx_L20_except_error)
                }
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                goto __pyx_L19_exception_handled;
              }
              __pyx_L20_except_error:;
              __Pyx_XGIVEREF(__pyx_t_9);
              __Pyx_XGIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
              goto __pyx_L7_error;
              __pyx_L22_try_return:;
              __Pyx_XGIVEREF(__pyx_t_9);
              __Pyx_XGIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
              goto __pyx_L15_return;
              __pyx_L19_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_9);
              __Pyx_XGIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
              __pyx_L23_try_end:;
            }
          }
          /*finally:*/ {
            /*normal exit:*/{
              if (__pyx_t_7) {
                __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[3], NULL);
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3194, __pyx_L7_error)
                __Pyx_GOTREF(__pyx_t_11);
                __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              }
              goto __pyx_L17;
            }
            __pyx_L15_return: {
              __pyx_t_11 = __pyx_r;
              __pyx_r = 0;
              if (__pyx_t_7) {
                __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[3], NULL);
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 3194, __pyx_L7_error)
                __Pyx_GOTREF(__pyx_t_10);
                __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
              }
              __pyx_r = __pyx_t_11;
              __pyx_t_11 = 0;
              goto __pyx_L11_try_return;
            }
            __pyx_L17:;
          }
          goto __pyx_L34;
          __pyx_L14_error:;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          goto __pyx_L7_error;
          __pyx_L34:;
        }
+3195:             batch = handle._pending_batch
                __pyx_t_12 = __pyx_cur_scope->__pyx_v_handle->_pending_batch;
                __pyx_cur_scope->__pyx_v_batch = __pyx_t_12;
+3196:             handle._pending_batch = NULL
                __pyx_cur_scope->__pyx_v_handle->_pending_batch = NULL;
+3197:             if handle._cursor == NULL:
                __pyx_t_13 = (__pyx_cur_scope->__pyx_v_handle->_cursor == NULL);
                if (unlikely(__pyx_t_13)) {
/* … */
                }
+3198:                 raise QuestDBError(
                  __pyx_t_8 = NULL;
                  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3198, __pyx_L18_error)
                  __Pyx_GOTREF(__pyx_t_2);
+3199:                     QuestDBErrorCode.InvalidApiCall, 'cursor is closed')
                  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 3199, __pyx_L18_error)
                  __Pyx_GOTREF(__pyx_t_14);
                  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3199, __pyx_L18_error)
                  __Pyx_GOTREF(__pyx_t_15);
                  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                  __pyx_t_3 = 1;
                  #if CYTHON_UNPACK_METHODS
                  if (unlikely(PyMethod_Check(__pyx_t_2))) {
                    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
                    assert(__pyx_t_8);
                    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
                    __Pyx_INCREF(__pyx_t_8);
                    __Pyx_INCREF(__pyx__function);
                    __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
                    __pyx_t_3 = 0;
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_15, __pyx_mstate_global->__pyx_kp_u_cursor_is_closed};
                    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
                    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3198, __pyx_L18_error)
                    __Pyx_GOTREF(__pyx_t_1);
                  }
                  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __PYX_ERR(2, 3198, __pyx_L18_error)
+3200:             if handle._cancelled:
                if (__pyx_cur_scope->__pyx_v_handle->_cancelled) {
/* … */
                }
+3201:                 return
                  __Pyx_XDECREF(__pyx_r);
                  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
                  goto __pyx_L22_try_return;
+3202:             handle._pin()
                ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_cur_scope->__pyx_v_handle->__pyx_vtab)->_pin(__pyx_cur_scope->__pyx_v_handle);
+3203:             try:
                /*try:*/ {
+3204:                 rows = _row_batch_decode(
                  __pyx_t_1 = __pyx_f_7questdb_7_client__row_batch_decode(__pyx_cur_scope->__pyx_v_batch, __pyx_cur_scope->__pyx_v_col_names, __pyx_cur_scope->__pyx_v_col_kinds, __pyx_cur_scope->__pyx_v_symbols, __pyx_cur_scope->__pyx_v_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3204, __pyx_L27_error)
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_GIVEREF(__pyx_t_1);
                  __pyx_cur_scope->__pyx_v_rows = ((PyObject*)__pyx_t_1);
                  __pyx_t_1 = 0;
                }
 3205:                     batch, col_names, col_kinds, symbols, np)
 3206:             finally:
+3207:                 handle._unpin()
                /*finally:*/ {
                  /*normal exit:*/{
                    ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_cur_scope->__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_cur_scope->__pyx_v_handle);
                    goto __pyx_L28;
                  }
                  __pyx_L27_error:;
                  /*exception exit:*/{
                    __Pyx_PyThreadState_assign
                    __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
                    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
                     __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
                    if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
                    __Pyx_XGOTREF(__pyx_t_19);
                    __Pyx_XGOTREF(__pyx_t_20);
                    __Pyx_XGOTREF(__pyx_t_21);
                    __Pyx_XGOTREF(__pyx_t_22);
                    __Pyx_XGOTREF(__pyx_t_23);
                    __Pyx_XGOTREF(__pyx_t_24);
                    __pyx_t_16 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
                    {
                      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_cur_scope->__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_cur_scope->__pyx_v_handle);
                    }
                    __Pyx_XGIVEREF(__pyx_t_22);
                    __Pyx_XGIVEREF(__pyx_t_23);
                    __Pyx_XGIVEREF(__pyx_t_24);
                    __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
                    __Pyx_XGIVEREF(__pyx_t_19);
                    __Pyx_XGIVEREF(__pyx_t_20);
                    __Pyx_XGIVEREF(__pyx_t_21);
                    __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
                    __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
                    __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
                    goto __pyx_L18_error;
                  }
                  __pyx_L28:;
                }
+3208:         while True:
        while (1) {
 3209:             # Read without the lock: a stale value delays the verdict by one
 3210:             # row. A cancelled cursor already sits at its terminal.
+3211:             for row in rows:
          if (unlikely(!__pyx_cur_scope->__pyx_v_rows)) { __Pyx_RaiseUnboundLocalError("rows"); __PYX_ERR(2, 3211, __pyx_L7_error) }
          if (unlikely(__pyx_cur_scope->__pyx_v_rows == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
            __PYX_ERR(2, 3211, __pyx_L7_error)
          }
          __pyx_t_15 = __pyx_cur_scope->__pyx_v_rows; __Pyx_INCREF(__pyx_t_15);
          __pyx_t_26 = 0;
          for (;;) {
            {
              Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_15);
              #if !CYTHON_ASSUME_SAFE_SIZE
              if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 3211, __pyx_L7_error)
              #endif
              if (__pyx_t_26 >= __pyx_temp) break;
            }
            __pyx_t_2 = __Pyx_PyList_GetItemRefFast(__pyx_t_15, __pyx_t_26, __Pyx_ReferenceSharing_OwnStrongReference);
            ++__pyx_t_26;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3211, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_row);
            __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_row, __pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_2);
            __pyx_t_2 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+3212:                 if handle._cursor == NULL:
            __pyx_t_25 = (__pyx_cur_scope->__pyx_v_handle->_cursor == NULL);
            if (unlikely(__pyx_t_25)) {
/* … */
            }
+3213:                     raise QuestDBError(
              __pyx_t_1 = NULL;
              __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3213, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_8);
+3214:                         QuestDBErrorCode.InvalidApiCall, 'cursor is closed')
              __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 3214, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_14);
              __pyx_t_27 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_27)) __PYX_ERR(2, 3214, __pyx_L7_error)
              __Pyx_GOTREF(__pyx_t_27);
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
              __pyx_t_3 = 1;
              #if CYTHON_UNPACK_METHODS
              if (unlikely(PyMethod_Check(__pyx_t_8))) {
                __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);
                assert(__pyx_t_1);
                PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
                __Pyx_INCREF(__pyx_t_1);
                __Pyx_INCREF(__pyx__function);
                __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
                __pyx_t_3 = 0;
              }
              #endif
              {
                PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_27, __pyx_mstate_global->__pyx_kp_u_cursor_is_closed};
                __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3213, __pyx_L7_error)
                __Pyx_GOTREF(__pyx_t_2);
              }
              __Pyx_Raise(__pyx_t_2, 0, 0, 0);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __PYX_ERR(2, 3213, __pyx_L7_error)
+3215:                 if handle._cancelled:
            if (__pyx_cur_scope->__pyx_v_handle->_cancelled) {
/* … */
            }
+3216:                     return
              __Pyx_XDECREF(__pyx_r);
              __pyx_r = Py_None; __Pyx_INCREF(Py_None);
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              goto __pyx_L11_try_return;
+3217:                 yield row
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_row);
            __pyx_r = __pyx_cur_scope->__pyx_v_row;
            __Pyx_XGIVEREF(__pyx_t_4);
            __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
            __Pyx_XGIVEREF(__pyx_t_5);
            __pyx_cur_scope->__pyx_t_1 = __pyx_t_5;
            __Pyx_XGIVEREF(__pyx_t_6);
            __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
            __Pyx_XGIVEREF(__pyx_t_15);
            __pyx_cur_scope->__pyx_t_3 = __pyx_t_15;
            __pyx_cur_scope->__pyx_t_4 = __pyx_t_26;
            __Pyx_XGIVEREF(__pyx_r);
            __Pyx_RefNannyFinishContext();
            __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
            /* return from generator, yielding value */
            __pyx_generator->resume_label = 2;
            return __pyx_r;
            __pyx_L41_resume_from_yield:;
            __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
            __pyx_cur_scope->__pyx_t_0 = 0;
            __Pyx_XGOTREF(__pyx_t_4);
            __pyx_t_5 = __pyx_cur_scope->__pyx_t_1;
            __pyx_cur_scope->__pyx_t_1 = 0;
            __Pyx_XGOTREF(__pyx_t_5);
            __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
            __pyx_cur_scope->__pyx_t_2 = 0;
            __Pyx_XGOTREF(__pyx_t_6);
            __pyx_t_15 = __pyx_cur_scope->__pyx_t_3;
            __pyx_cur_scope->__pyx_t_3 = 0;
            __Pyx_XGOTREF(__pyx_t_15);
            __pyx_t_26 = __pyx_cur_scope->__pyx_t_4;
            if (unlikely(!__pyx_sent_value)) __PYX_ERR(2, 3217, __pyx_L7_error)
+3218:             rows = None
          __Pyx_INCREF(Py_None);
          __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_rows);
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_rows, ((PyObject*)Py_None));
          __Pyx_GIVEREF(Py_None);
+3219:             with handle._lock:
          /*with:*/ {
            __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_cur_scope->__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3219, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_2 = NULL;
            __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_cur_scope->__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3219, __pyx_L43_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_3 = 1;
            #if CYTHON_UNPACK_METHODS
            if (likely(PyMethod_Check(__pyx_t_8))) {
              __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
              assert(__pyx_t_2);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
              __pyx_t_3 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
              __pyx_t_15 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3219, __pyx_L43_error)
              __Pyx_GOTREF(__pyx_t_15);
            }
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            /*try:*/ {
              {
                /*try:*/ {
/* … */
                }
                __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
                __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
                __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
                goto __pyx_L56_try_end;
                __pyx_L49_error:;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
                __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
                __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
                /*except:*/ {
                  __Pyx_AddTraceback("questdb._client._row_stream_iter", __pyx_clineno, __pyx_lineno, __pyx_filename);
                  if (__Pyx_GetException(&__pyx_t_15, &__pyx_t_1, &__pyx_t_27) < 0) __PYX_ERR(2, 3219, __pyx_L51_except_error)
                  __Pyx_XGOTREF(__pyx_t_15);
                  __Pyx_XGOTREF(__pyx_t_1);
                  __Pyx_XGOTREF(__pyx_t_27);
                  __pyx_t_2 = PyTuple_Pack(3, __pyx_t_15, __pyx_t_1, __pyx_t_27); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3219, __pyx_L51_except_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, NULL);
                  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 3219, __pyx_L51_except_error)
                  __Pyx_GOTREF(__pyx_t_19);
                  __pyx_t_25 = __Pyx_PyObject_IsTrue(__pyx_t_19);
                  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
                  if (__pyx_t_25 < (0)) __PYX_ERR(2, 3219, __pyx_L51_except_error)
                  __pyx_t_13 = (!__pyx_t_25);
                  if (unlikely(__pyx_t_13)) {
                    __Pyx_GIVEREF(__pyx_t_15);
                    __Pyx_GIVEREF(__pyx_t_1);
                    __Pyx_XGIVEREF(__pyx_t_27);
                    __Pyx_ErrRestoreWithState(__pyx_t_15, __pyx_t_1, __pyx_t_27);
                    __pyx_t_15 = 0;  __pyx_t_1 = 0;  __pyx_t_27 = 0; 
                    __PYX_ERR(2, 3219, __pyx_L51_except_error)
                  }
                  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
                  goto __pyx_L50_exception_handled;
                }
                __pyx_L51_except_error:;
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_10);
                __Pyx_XGIVEREF(__pyx_t_9);
                __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
                goto __pyx_L7_error;
                __pyx_L53_try_return:;
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_10);
                __Pyx_XGIVEREF(__pyx_t_9);
                __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
                goto __pyx_L46_return;
                __pyx_L50_exception_handled:;
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_10);
                __Pyx_XGIVEREF(__pyx_t_9);
                __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
                __pyx_L56_try_end:;
              }
            }
            /*finally:*/ {
              /*normal exit:*/{
                if (__pyx_t_7) {
                  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[3], NULL);
                  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                  if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3219, __pyx_L7_error)
                  __Pyx_GOTREF(__pyx_t_9);
                  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                }
                goto __pyx_L48;
              }
              __pyx_L46_return: {
                __pyx_t_9 = __pyx_r;
                __pyx_r = 0;
                if (__pyx_t_7) {
                  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[3], NULL);
                  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                  if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 3219, __pyx_L7_error)
                  __Pyx_GOTREF(__pyx_t_10);
                  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                }
                __pyx_r = __pyx_t_9;
                __pyx_t_9 = 0;
                goto __pyx_L11_try_return;
              }
              __pyx_L48:;
            }
            goto __pyx_L81;
            __pyx_L43_error:;
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            goto __pyx_L7_error;
            __pyx_L81:;
          }
        }
+3220:                 cursor = handle._cursor
                  __pyx_t_28 = __pyx_cur_scope->__pyx_v_handle->_cursor;
                  __pyx_cur_scope->__pyx_v_cursor = __pyx_t_28;
+3221:                 if cursor == NULL:
                  __pyx_t_25 = (__pyx_cur_scope->__pyx_v_cursor == NULL);
                  if (unlikely(__pyx_t_25)) {
/* … */
                  }
+3222:                     raise QuestDBError(
                    __pyx_t_8 = NULL;
                    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3222, __pyx_L49_error)
                    __Pyx_GOTREF(__pyx_t_2);
+3223:                         QuestDBErrorCode.InvalidApiCall, 'cursor is closed')
                    __Pyx_GetModuleGlobalName(__pyx_t_27, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_27)) __PYX_ERR(2, 3223, __pyx_L49_error)
                    __Pyx_GOTREF(__pyx_t_27);
                    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_27, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3223, __pyx_L49_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                    __pyx_t_3 = 1;
                    #if CYTHON_UNPACK_METHODS
                    if (unlikely(PyMethod_Check(__pyx_t_2))) {
                      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
                      assert(__pyx_t_8);
                      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
                      __Pyx_INCREF(__pyx_t_8);
                      __Pyx_INCREF(__pyx__function);
                      __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
                      __pyx_t_3 = 0;
                    }
                    #endif
                    {
                      PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_1, __pyx_mstate_global->__pyx_kp_u_cursor_is_closed};
                      __pyx_t_15 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                      if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3222, __pyx_L49_error)
                      __Pyx_GOTREF(__pyx_t_15);
                    }
                    __Pyx_Raise(__pyx_t_15, 0, 0, 0);
                    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __PYX_ERR(2, 3222, __pyx_L49_error)
+3224:                 if handle._cancelled:
                  if (__pyx_cur_scope->__pyx_v_handle->_cancelled) {
/* … */
                  }
+3225:                     return
                    __Pyx_XDECREF(__pyx_r);
                    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
                    goto __pyx_L53_try_return;
+3226:                 with nogil:
                  {
                      PyThreadState * _save;
                      _save = PyEval_SaveThread();
                      __Pyx_FastGIL_Remember();
                      /*try:*/ {
/* … */
                      /*finally:*/ {
                        /*normal exit:*/{
                          __Pyx_FastGIL_Forget();
                          PyEval_RestoreThread(_save);
                          goto __pyx_L63;
                        }
                        __pyx_L63:;
                      }
                  }
+3227:                     batch = qwp_reader_cursor_next_batch(cursor, &err)
                        __pyx_cur_scope->__pyx_v_batch = qwp_reader_cursor_next_batch(__pyx_cur_scope->__pyx_v_cursor, (&__pyx_cur_scope->__pyx_v_err));
                      }
+3228:                 if err == NULL:
                  __pyx_t_25 = (__pyx_cur_scope->__pyx_v_err == NULL);
                  if (__pyx_t_25) {
/* … */
                  }
+3229:                     _oidc_raise_unscheduled_main()
                    __pyx_t_29 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_29 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3229, __pyx_L49_error)
+3230:                 if handle._reset_seq != seen_seq:
                  __pyx_t_25 = (__pyx_cur_scope->__pyx_v_handle->_reset_seq != __pyx_cur_scope->__pyx_v_seen_seq);
                  if (__pyx_t_25) {
/* … */
                  }
 3231:                     # Rows may already be out the door, so a replay from
 3232:                     # batch 0 would duplicate them. Streaming cannot take
 3233:                     # them back: surface a clean, catchable error (the same
 3234:                     # contract as the Arrow stream).
+3235:                     if err != NULL:
                    __pyx_t_25 = (__pyx_cur_scope->__pyx_v_err != NULL);
                    if (__pyx_t_25) {
/* … */
                    }
+3236:                         questdb_error_free(err)
                      questdb_error_free(__pyx_cur_scope->__pyx_v_err);
+3237:                         err = NULL
                      __pyx_cur_scope->__pyx_v_err = NULL;
+3238:                     raise QuestDBError(
                    __pyx_t_2 = NULL;
                    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3238, __pyx_L49_error)
                    __Pyx_GOTREF(__pyx_t_1);
+3239:                         QuestDBErrorCode.FailoverWouldDuplicate,
                    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3239, __pyx_L49_error)
                    __Pyx_GOTREF(__pyx_t_8);
                    __pyx_t_27 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_FailoverWouldDuplicate); if (unlikely(!__pyx_t_27)) __PYX_ERR(2, 3239, __pyx_L49_error)
                    __Pyx_GOTREF(__pyx_t_27);
                    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                    __pyx_t_3 = 1;
                    #if CYTHON_UNPACK_METHODS
                    if (unlikely(PyMethod_Check(__pyx_t_1))) {
                      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
                      assert(__pyx_t_2);
                      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
                      __Pyx_INCREF(__pyx_t_2);
                      __Pyx_INCREF(__pyx__function);
                      __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
                      __pyx_t_3 = 0;
                    }
                    #endif
                    {
                      PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_27, __pyx_mstate_global->__pyx_kp_u_mid_query_failover_would_duplica_2};
                      __pyx_t_15 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                      if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3238, __pyx_L49_error)
                      __Pyx_GOTREF(__pyx_t_15);
                    }
                    __Pyx_Raise(__pyx_t_15, 0, 0, 0);
                    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                    __PYX_ERR(2, 3238, __pyx_L49_error)
 3240:                         'mid-query failover would duplicate already-'
 3241:                         'delivered rows; re-issue the query')
+3242:                 if batch == NULL:
                  __pyx_t_25 = (__pyx_cur_scope->__pyx_v_batch == NULL);
                  if (__pyx_t_25) {
/* … */
                  }
+3243:                     if err != NULL:
                    __pyx_t_25 = (__pyx_cur_scope->__pyx_v_err != NULL);
                    if (unlikely(__pyx_t_25)) {
/* … */
                    }
+3244:                         raise _reader_err_to_py(err)
                      __pyx_t_15 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_cur_scope->__pyx_v_err); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3244, __pyx_L49_error)
                      __Pyx_GOTREF(__pyx_t_15);
                      __Pyx_Raise(__pyx_t_15, 0, 0, 0);
                      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                      __PYX_ERR(2, 3244, __pyx_L49_error)
+3245:                     _mark_reader_drained(handle)
                    __pyx_t_29 = __pyx_f_7questdb_7_client__mark_reader_drained(__pyx_cur_scope->__pyx_v_handle); if (unlikely(__pyx_t_29 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3245, __pyx_L49_error)
+3246:                     return
                    __Pyx_XDECREF(__pyx_r);
                    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
                    goto __pyx_L53_try_return;
+3247:                 handle._pin()
                  ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_cur_scope->__pyx_v_handle->__pyx_vtab)->_pin(__pyx_cur_scope->__pyx_v_handle);
+3248:                 try:
                  /*try:*/ {
+3249:                     rows = _row_batch_decode(
                    __pyx_t_15 = __pyx_f_7questdb_7_client__row_batch_decode(__pyx_cur_scope->__pyx_v_batch, __pyx_cur_scope->__pyx_v_col_names, __pyx_cur_scope->__pyx_v_col_kinds, __pyx_cur_scope->__pyx_v_symbols, __pyx_cur_scope->__pyx_v_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3249, __pyx_L72_error)
                    __Pyx_GOTREF(__pyx_t_15);
                    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_rows);
                    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_rows, ((PyObject*)__pyx_t_15));
                    __Pyx_GIVEREF(__pyx_t_15);
                    __pyx_t_15 = 0;
                  }
 3250:                         batch, col_names, col_kinds, symbols, np)
 3251:                 finally:
+3252:                     handle._unpin()
                  /*finally:*/ {
                    /*normal exit:*/{
                      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_cur_scope->__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_cur_scope->__pyx_v_handle);
                      goto __pyx_L73;
                    }
                    __pyx_L72_error:;
                    /*exception exit:*/{
                      __Pyx_PyThreadState_assign
                      __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0;
                      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
                      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                      __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
                      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
                       __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_20, &__pyx_t_19);
                      if ( unlikely(__Pyx_GetException(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_24, &__pyx_t_23, &__pyx_t_22);
                      __Pyx_XGOTREF(__pyx_t_24);
                      __Pyx_XGOTREF(__pyx_t_23);
                      __Pyx_XGOTREF(__pyx_t_22);
                      __Pyx_XGOTREF(__pyx_t_21);
                      __Pyx_XGOTREF(__pyx_t_20);
                      __Pyx_XGOTREF(__pyx_t_19);
                      __pyx_t_17 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_30 = __pyx_filename;
                      {
                        ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_cur_scope->__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_cur_scope->__pyx_v_handle);
                      }
                      __Pyx_XGIVEREF(__pyx_t_21);
                      __Pyx_XGIVEREF(__pyx_t_20);
                      __Pyx_XGIVEREF(__pyx_t_19);
                      __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_20, __pyx_t_19);
                      __Pyx_XGIVEREF(__pyx_t_24);
                      __Pyx_XGIVEREF(__pyx_t_23);
                      __Pyx_XGIVEREF(__pyx_t_22);
                      __Pyx_ErrRestore(__pyx_t_24, __pyx_t_23, __pyx_t_22);
                      __pyx_t_24 = 0; __pyx_t_23 = 0; __pyx_t_22 = 0; __pyx_t_21 = 0; __pyx_t_20 = 0; __pyx_t_19 = 0;
                      __pyx_lineno = __pyx_t_17; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_30;
                      goto __pyx_L49_error;
                    }
                    __pyx_L73:;
                  }
+3253:     except BaseException:
      __pyx_t_16 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_16) {
        __Pyx_AddTraceback("questdb._client._row_stream_iter", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_27, &__pyx_t_1, &__pyx_t_15) < 0) __PYX_ERR(2, 3253, __pyx_L9_except_error)
        __Pyx_XGOTREF(__pyx_t_27);
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_15);
+3254:         handle._rows_cut_short = True
        __pyx_cur_scope->__pyx_v_handle->_rows_cut_short = 1;
+3255:         raise
        __Pyx_GIVEREF(__pyx_t_27);
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_ErrRestoreWithState(__pyx_t_27, __pyx_t_1, __pyx_t_15);
        __pyx_t_27 = 0;  __pyx_t_1 = 0;  __pyx_t_15 = 0; 
        __PYX_ERR(2, 3255, __pyx_L9_except_error)
      }
      goto __pyx_L9_except_error;
 3256:     finally:
+3257:         handle._free()
  /*finally:*/ {
    /*normal exit:*/{
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_cur_scope->__pyx_v_handle->__pyx_vtab)->_free(__pyx_cur_scope->__pyx_v_handle);
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_7 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_7, &__pyx_t_9, &__pyx_t_10);
      if ( unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __pyx_t_16 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_31 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_cur_scope->__pyx_v_handle->__pyx_vtab)->_free(__pyx_cur_scope->__pyx_v_handle);
      }
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_9, __pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_5, __pyx_t_4);
      __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_7 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_31;
      goto __pyx_L1_error;
    }
    __pyx_L4_return: {
      __pyx_t_10 = __pyx_r;
      __pyx_r = 0;
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_cur_scope->__pyx_v_handle->__pyx_vtab)->_free(__pyx_cur_scope->__pyx_v_handle);
      __pyx_r = __pyx_t_10;
      __pyx_t_10 = 0;
      goto __pyx_L0;
    }
    __pyx_L6:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 3258: 
 3259: 
+3260: cdef object _numpy_frame_from_cursor(_CursorHandle handle):
static PyObject *__pyx_f_7questdb_7_client__numpy_frame_from_cursor(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle) {
  PyObject *__pyx_v_np = NULL;
  PyObject *__pyx_v_pd = NULL;
  struct qwp_reader_cursor *__pyx_v_cursor;
  questdb_error *__pyx_v_err;
  struct qwp_reader_batch const *__pyx_v_batch;
  struct qwp_reader_symbol_dict __pyx_v_sd;
  size_t __pyx_v_n_cols;
  size_t __pyx_v_row_count;
  size_t __pyx_v_col_idx;
  size_t __pyx_v_prev_dict_n;
  int __pyx_v_first;
  PyObject *__pyx_v_pinned_meta = 0;
  PyObject *__pyx_v_pinned_names_b = 0;
  int __pyx_v_has_symbol;
  int __pyx_v_seen_seq;
  PyObject *__pyx_v_col_names = NULL;
  PyObject *__pyx_v_col_kinds = NULL;
  PyObject *__pyx_v_col_scales = NULL;
  PyObject *__pyx_v_col_precision = NULL;
  PyObject *__pyx_v_col_chunks = NULL;
  PyObject *__pyx_v_col_masks = NULL;
  PyObject *__pyx_v_symbol_categories = NULL;
  PyObject *__pyx_v_batch_chunks = NULL;
  PyObject *__pyx_v_batch_masks = NULL;
  CYTHON_UNUSED size_t __pyx_9genexpr10__pyx_v__;
  CYTHON_UNUSED size_t __pyx_9genexpr11__pyx_v__;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._numpy_frame_from_cursor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_np);
  __Pyx_XDECREF(__pyx_v_pd);
  __Pyx_XDECREF(__pyx_v_pinned_meta);
  __Pyx_XDECREF(__pyx_v_pinned_names_b);
  __Pyx_XDECREF(__pyx_v_col_names);
  __Pyx_XDECREF(__pyx_v_col_kinds);
  __Pyx_XDECREF(__pyx_v_col_scales);
  __Pyx_XDECREF(__pyx_v_col_precision);
  __Pyx_XDECREF(__pyx_v_col_chunks);
  __Pyx_XDECREF(__pyx_v_col_masks);
  __Pyx_XDECREF(__pyx_v_symbol_categories);
  __Pyx_XDECREF(__pyx_v_batch_chunks);
  __Pyx_XDECREF(__pyx_v_batch_masks);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3261:     import numpy as np
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numpy, 0, 0, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3261, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_np = __pyx_t_1;
  __pyx_t_1 = 0;
+3262:     import pandas as pd
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pandas_2, 0, 0, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3262, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_pd = __pyx_t_1;
  __pyx_t_1 = 0;
 3263:     cdef qwp_reader_cursor* cursor
+3264:     cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 3265:     cdef const qwp_reader_batch* batch
 3266:     cdef qwp_reader_symbol_dict sd
+3267:     cdef size_t n_cols = 0
  __pyx_v_n_cols = 0;
+3268:     cdef size_t row_count = 0
  __pyx_v_row_count = 0;
 3269:     cdef size_t col_idx
+3270:     cdef size_t prev_dict_n = 0
  __pyx_v_prev_dict_n = 0;
+3271:     cdef bint first = True
  __pyx_v_first = 1;
+3272:     cdef tuple pinned_meta = None
  __Pyx_INCREF(Py_None);
  __pyx_v_pinned_meta = ((PyObject*)Py_None);
+3273:     cdef list pinned_names_b = None
  __Pyx_INCREF(Py_None);
  __pyx_v_pinned_names_b = ((PyObject*)Py_None);
+3274:     cdef bint has_symbol = False
  __pyx_v_has_symbol = 0;
 3275:     cdef int seen_seq
 3276: 
+3277:     if handle is None:
  __pyx_t_3 = (((PyObject *)__pyx_v_handle) == Py_None);
  if (unlikely(__pyx_t_3)) {
/* … */
  }
+3278:         raise QuestDBError(QuestDBErrorCode.InvalidApiCall, 'cursor is closed')
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_cursor_is_closed};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3278, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 3278, __pyx_L1_error)
+3279:     handle._check_not_driving('to_numpy', check_lock=True)
  __pyx_t_10.__pyx_n = 1;
  __pyx_t_10.check_lock = 1;
  __pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_check_not_driving(__pyx_v_handle, __pyx_mstate_global->__pyx_n_u_to_numpy, &__pyx_t_10); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3279, __pyx_L1_error)
+3280:     if not handle._is_live():
  __pyx_t_3 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_is_live(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3280, __pyx_L1_error)
  __pyx_t_11 = (!__pyx_t_3);
  if (unlikely(__pyx_t_11)) {
/* … */
  }
+3281:         raise QuestDBError(QuestDBErrorCode.InvalidApiCall, 'cursor is closed')
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_8 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_cursor_is_closed};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3281, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 3281, __pyx_L1_error)
+3282:     seen_seq = handle._reset_sequence()
  __pyx_t_12 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_reset_sequence(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3282, __pyx_L1_error)
  __pyx_v_seen_seq = __pyx_t_12;
 3283: 
+3284:     col_names = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_names = __pyx_t_1;
  __pyx_t_1 = 0;
+3285:     col_kinds = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_kinds = __pyx_t_1;
  __pyx_t_1 = 0;
+3286:     col_scales = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_scales = __pyx_t_1;
  __pyx_t_1 = 0;
+3287:     col_precision = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_precision = __pyx_t_1;
  __pyx_t_1 = 0;
+3288:     col_chunks = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3288, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_chunks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3289:     col_masks = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_col_masks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3290:     symbol_categories = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_symbol_categories = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 3291: 
+3292:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    goto __pyx_L10_try_end;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __pyx_L7_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_13);
    __Pyx_XGIVEREF(__pyx_t_14);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_13, __pyx_t_14);
    goto __pyx_L1_error;
    __pyx_L10_try_end:;
  }
+3293:         while True:
      while (1) {
+3294:             with handle._lock:
        /*with:*/ {
          __pyx_t_15 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3294, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_7 = NULL;
          __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3294, __pyx_L13_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_8 = 1;
          #if CYTHON_UNPACK_METHODS
          if (likely(PyMethod_Check(__pyx_t_6))) {
            __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
            assert(__pyx_t_7);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
            __pyx_t_8 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
            __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3294, __pyx_L13_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          /*try:*/ {
            {
              /*try:*/ {
/* … */
              }
              __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              goto __pyx_L26_try_end;
              __pyx_L19_error:;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
              /*except:*/ {
                __Pyx_AddTraceback("questdb._client._numpy_frame_from_cursor", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_5) < 0) __PYX_ERR(2, 3294, __pyx_L21_except_error)
                __Pyx_XGOTREF(__pyx_t_6);
                __Pyx_XGOTREF(__pyx_t_4);
                __Pyx_XGOTREF(__pyx_t_5);
                __pyx_t_7 = PyTuple_Pack(3, __pyx_t_6, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3294, __pyx_L21_except_error)
                __Pyx_GOTREF(__pyx_t_7);
                __pyx_t_30 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_7, NULL);
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                if (unlikely(!__pyx_t_30)) __PYX_ERR(2, 3294, __pyx_L21_except_error)
                __Pyx_GOTREF(__pyx_t_30);
                __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_30);
                __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
                if (__pyx_t_11 < (0)) __PYX_ERR(2, 3294, __pyx_L21_except_error)
                __pyx_t_3 = (!__pyx_t_11);
                if (unlikely(__pyx_t_3)) {
                  __Pyx_GIVEREF(__pyx_t_6);
                  __Pyx_GIVEREF(__pyx_t_4);
                  __Pyx_XGIVEREF(__pyx_t_5);
                  __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_4, __pyx_t_5);
                  __pyx_t_6 = 0;  __pyx_t_4 = 0;  __pyx_t_5 = 0; 
                  __PYX_ERR(2, 3294, __pyx_L21_except_error)
                }
                __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                goto __pyx_L20_exception_handled;
              }
              __pyx_L21_except_error:;
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
              goto __pyx_L5_error;
              __pyx_L24_try_break:;
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
              goto __pyx_L15_break;
              __pyx_L20_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_16);
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
              __pyx_L26_try_end:;
            }
          }
          /*finally:*/ {
            /*normal exit:*/{
              if (__pyx_t_15) {
                __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_mstate_global->__pyx_tuple[3], NULL);
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3294, __pyx_L5_error)
                __Pyx_GOTREF(__pyx_t_18);
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              }
              goto __pyx_L18;
            }
            __pyx_L15_break: {
              if (__pyx_t_15) {
                __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_mstate_global->__pyx_tuple[3], NULL);
                __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3294, __pyx_L5_error)
                __Pyx_GOTREF(__pyx_t_18);
                __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              }
              goto __pyx_L12_break;
            }
            __pyx_L18:;
          }
          goto __pyx_L61;
          __pyx_L13_error:;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          goto __pyx_L5_error;
          __pyx_L61:;
        }
+3295:                 cursor = handle._cursor
                __pyx_t_19 = __pyx_v_handle->_cursor;
                __pyx_v_cursor = __pyx_t_19;
+3296:                 if cursor == NULL:
                __pyx_t_11 = (__pyx_v_cursor == NULL);
                if (unlikely(__pyx_t_11)) {
/* … */
                }
+3297:                     raise QuestDBError(
                  __pyx_t_6 = NULL;
                  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3297, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_7);
+3298:                         QuestDBErrorCode.InvalidApiCall, 'cursor is closed')
                  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3298, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3298, __pyx_L19_error)
                  __Pyx_GOTREF(__pyx_t_4);
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  __pyx_t_8 = 1;
                  #if CYTHON_UNPACK_METHODS
                  if (unlikely(PyMethod_Check(__pyx_t_7))) {
                    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
                    assert(__pyx_t_6);
                    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
                    __Pyx_INCREF(__pyx_t_6);
                    __Pyx_INCREF(__pyx__function);
                    __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
                    __pyx_t_8 = 0;
                  }
                  #endif
                  {
                    PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_4, __pyx_mstate_global->__pyx_kp_u_cursor_is_closed};
                    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
                    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3297, __pyx_L19_error)
                    __Pyx_GOTREF(__pyx_t_1);
                  }
                  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __PYX_ERR(2, 3297, __pyx_L19_error)
+3299:                 handle._check_not_driving('to_numpy')
                __pyx_t_9 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_check_not_driving(__pyx_v_handle, __pyx_mstate_global->__pyx_n_u_to_numpy, NULL); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3299, __pyx_L19_error)
+3300:                 handle._pin()
                ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_pin(__pyx_v_handle);
+3301:                 try:
                /*try:*/ {
+3302:                     handle._native_in_flight = True
                  __pyx_v_handle->_native_in_flight = 1;
+3303:                     try:
                  /*try:*/ {
+3304:                         with nogil:
                    {
                        PyThreadState * _save;
                        _save = PyEval_SaveThread();
                        __Pyx_FastGIL_Remember();
                        /*try:*/ {
/* … */
                        /*finally:*/ {
                          /*normal exit:*/{
                            __Pyx_FastGIL_Forget();
                            PyEval_RestoreThread(_save);
                            goto __pyx_L42;
                          }
                          __pyx_L42:;
                        }
                    }
                  }
+3305:                             batch = qwp_reader_cursor_next_batch(
                          __pyx_v_batch = qwp_reader_cursor_next_batch(__pyx_v_cursor, (&__pyx_v_err));
                        }
 3306:                                 cursor, &err)
 3307:                     finally:
+3308:                         handle._native_in_flight = False
                  /*finally:*/ {
                    /*normal exit:*/{
                      __pyx_v_handle->_native_in_flight = 0;
                      goto __pyx_L37;
                    }
                    __pyx_L37:;
                  }
+3309:                     if err == NULL:
                  __pyx_t_11 = (__pyx_v_err == NULL);
                  if (__pyx_t_11) {
/* … */
                  }
+3310:                         _oidc_raise_unscheduled_main()
                    __pyx_t_9 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3310, __pyx_L31_error)
+3311:                     if handle._reset_seq != seen_seq:
                  __pyx_t_11 = (__pyx_v_handle->_reset_seq != __pyx_v_seen_seq);
                  if (__pyx_t_11) {
/* … */
                  }
 3312:                         # Mid-query failover replayed from batch-0: discard
 3313:                         # the pre-failover accumulation and the schema.
+3314:                         seen_seq = handle._reset_seq
                    __pyx_t_12 = __pyx_v_handle->_reset_seq;
                    __pyx_v_seen_seq = __pyx_t_12;
+3315:                         first = True
                    __pyx_v_first = 1;
+3316:                         prev_dict_n = 0
                    __pyx_v_prev_dict_n = 0;
+3317:                         has_symbol = False
                    __pyx_v_has_symbol = 0;
+3318:                         col_chunks = []
                    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3318, __pyx_L31_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF_SET(__pyx_v_col_chunks, ((PyObject*)__pyx_t_1));
                    __pyx_t_1 = 0;
+3319:                         col_masks = []
                    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3319, __pyx_L31_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF_SET(__pyx_v_col_masks, ((PyObject*)__pyx_t_1));
                    __pyx_t_1 = 0;
+3320:                         symbol_categories = []
                    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3320, __pyx_L31_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF_SET(__pyx_v_symbol_categories, ((PyObject*)__pyx_t_1));
                    __pyx_t_1 = 0;
+3321:                     if batch == NULL:
                  __pyx_t_11 = (__pyx_v_batch == NULL);
                  if (__pyx_t_11) {
/* … */
                  }
+3322:                         if err != NULL:
                    __pyx_t_11 = (__pyx_v_err != NULL);
                    if (unlikely(__pyx_t_11)) {
/* … */
                    }
+3323:                             raise _reader_err_to_py(err)
                      __pyx_t_1 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3323, __pyx_L31_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
                      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                      __PYX_ERR(2, 3323, __pyx_L31_error)
+3324:                         break
                    goto __pyx_L29_break;
+3325:                     row_count = qwp_reader_batch_row_count(batch)
                  __pyx_v_row_count = qwp_reader_batch_row_count(__pyx_v_batch);
+3326:                     if first:
                  if (__pyx_v_first) {
/* … */
                    goto __pyx_L47;
                  }
+3327:                         pinned_meta = _numpy_extract_meta(batch)
                    __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_extract_meta(__pyx_v_batch); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3327, __pyx_L31_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF_SET(__pyx_v_pinned_meta, ((PyObject*)__pyx_t_1));
                    __pyx_t_1 = 0;
+3328:                         pinned_names_b = _numpy_pinned_name_bytes(pinned_meta)
                    __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_pinned_name_bytes(__pyx_v_pinned_meta); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3328, __pyx_L31_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    __Pyx_DECREF_SET(__pyx_v_pinned_names_b, ((PyObject*)__pyx_t_1));
                    __pyx_t_1 = 0;
+3329:                         (col_names, col_kinds, col_scales, col_precision,
                    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 3329, __pyx_L31_error)
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    __Pyx_DECREF_SET(__pyx_v_col_names, __pyx_t_1);
                    __pyx_t_1 = 0;
                    __Pyx_DECREF_SET(__pyx_v_col_kinds, __pyx_t_7);
                    __pyx_t_7 = 0;
                    __Pyx_DECREF_SET(__pyx_v_col_scales, __pyx_t_4);
                    __pyx_t_4 = 0;
                    __Pyx_DECREF_SET(__pyx_v_col_precision, __pyx_t_6);
                    __pyx_t_6 = 0;
                    __pyx_v_has_symbol = __pyx_t_11;
+3330:                          has_symbol) = pinned_meta
                    if (likely(__pyx_v_pinned_meta != Py_None)) {
                      PyObject* sequence = __pyx_v_pinned_meta;
                      Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
                      if (unlikely(size != 5)) {
                        if (size > 5) __Pyx_RaiseTooManyValuesError(5);
                        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                        __PYX_ERR(2, 3329, __pyx_L31_error)
                      }
                      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
                      __Pyx_INCREF(__pyx_t_1);
                      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1);
                      __Pyx_INCREF(__pyx_t_7);
                      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2);
                      __Pyx_INCREF(__pyx_t_4);
                      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3);
                      __Pyx_INCREF(__pyx_t_6);
                      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 4);
                      __Pyx_INCREF(__pyx_t_5);
                      #else
                      {
                        Py_ssize_t i;
                        PyObject** temps[5] = {&__pyx_t_1,&__pyx_t_7,&__pyx_t_4,&__pyx_t_6,&__pyx_t_5};
                        for (i=0; i < 5; i++) {
                          PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(2, 3329, __pyx_L31_error)
                          __Pyx_GOTREF(item);
                          *(temps[i]) = item;
                        }
                      }
                      #endif
                    } else {
                      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 3329, __pyx_L31_error)
                    }
+3331:                         n_cols = <size_t>len(col_names)
                    __pyx_t_20 = PyObject_Length(__pyx_v_col_names); if (unlikely(__pyx_t_20 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3331, __pyx_L31_error)
                    __pyx_v_n_cols = ((size_t)__pyx_t_20);
+3332:                         col_chunks = [[] for _ in range(n_cols)]
                    { /* enter inner scope */
                      __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3332, __pyx_L31_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      __pyx_t_8 = __pyx_v_n_cols;
                      __pyx_t_21 = __pyx_t_8;
                      for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
                        __pyx_9genexpr10__pyx_v__ = __pyx_t_22;
                        __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3332, __pyx_L31_error)
                        __Pyx_GOTREF(__pyx_t_6);
                        if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_6))) __PYX_ERR(2, 3332, __pyx_L31_error)
                        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
                      }
                    } /* exit inner scope */
                    __Pyx_DECREF_SET(__pyx_v_col_chunks, ((PyObject*)__pyx_t_5));
                    __pyx_t_5 = 0;
+3333:                         col_masks = [[] for _ in range(n_cols)]
                    { /* enter inner scope */
                      __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3333, __pyx_L31_error)
                      __Pyx_GOTREF(__pyx_t_5);
                      __pyx_t_8 = __pyx_v_n_cols;
                      __pyx_t_21 = __pyx_t_8;
                      for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
                        __pyx_9genexpr11__pyx_v__ = __pyx_t_22;
                        __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3333, __pyx_L31_error)
                        __Pyx_GOTREF(__pyx_t_6);
                        if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_6))) __PYX_ERR(2, 3333, __pyx_L31_error)
                        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
                      }
                    } /* exit inner scope */
                    __Pyx_DECREF_SET(__pyx_v_col_masks, ((PyObject*)__pyx_t_5));
                    __pyx_t_5 = 0;
+3334:                         first = False
                    __pyx_v_first = 0;
 3335:                     else:
+3336:                         _numpy_check_meta_pinned(
                  /*else*/ {
/* … */
                    __pyx_t_5 = __pyx_f_7questdb_7_client__numpy_check_meta_pinned(__pyx_v_pinned_meta, __pyx_v_pinned_names_b, __pyx_v_batch); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3336, __pyx_L31_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  }
                  __pyx_L47:;
 3337:                             pinned_meta, pinned_names_b, batch)
+3338:                     if has_symbol:
                  if (__pyx_v_has_symbol) {
/* … */
                  }
+3339:                         _reader_check(
                    __pyx_t_12 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_symbol_dict(__pyx_v_batch, (&__pyx_v_sd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_symbol_dict); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(2, 3339, __pyx_L31_error)
 3340:                             qwp_reader_batch_symbol_dict(batch, &sd, &err),
 3341:                             &err, 'qwp_reader_batch_symbol_dict')
+3342:                         if sd.entry_count > prev_dict_n:
                    __pyx_t_11 = (__pyx_v_sd.entry_count > __pyx_v_prev_dict_n);
                    if (__pyx_t_11) {
/* … */
                    }
+3343:                             _symbol_categories_extend(
                      __pyx_f_7questdb_7_client__symbol_categories_extend(__pyx_v_symbol_categories, (&__pyx_v_sd), __pyx_v_prev_dict_n); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3343, __pyx_L31_error)
 3344:                                 symbol_categories, &sd, prev_dict_n)
+3345:                             prev_dict_n = sd.entry_count
                      __pyx_t_8 = __pyx_v_sd.entry_count;
                      __pyx_v_prev_dict_n = __pyx_t_8;
+3346:                     batch_chunks, batch_masks = _numpy_batch_columns(
                  __pyx_t_6 = __pyx_f_7questdb_7_client__numpy_batch_columns(__pyx_v_batch, ((PyObject*)__pyx_t_5), __pyx_v_n_cols, __pyx_v_row_count, __pyx_v_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3346, __pyx_L31_error)
                  __Pyx_GOTREF(__pyx_t_6);
                  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                  if (likely(__pyx_t_6 != Py_None)) {
                    PyObject* sequence = __pyx_t_6;
                    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
                    if (unlikely(size != 2)) {
                      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
                      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                      __PYX_ERR(2, 3346, __pyx_L31_error)
                    }
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0);
                    __Pyx_INCREF(__pyx_t_5);
                    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
                    __Pyx_INCREF(__pyx_t_4);
                    #else
                    __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3346, __pyx_L31_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __pyx_t_4 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3346, __pyx_L31_error)
                    __Pyx_GOTREF(__pyx_t_4);
                    #endif
                    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
                  } else {
                    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 3346, __pyx_L31_error)
                  }
                  __Pyx_XDECREF_SET(__pyx_v_batch_chunks, __pyx_t_5);
                  __pyx_t_5 = 0;
                  __Pyx_XDECREF_SET(__pyx_v_batch_masks, __pyx_t_4);
                  __pyx_t_4 = 0;
                }
+3347:                         batch, col_kinds, n_cols, row_count, np)
                  __pyx_t_5 = __pyx_v_col_kinds;
                  __Pyx_INCREF(__pyx_t_5);
                  if (!(likely(PyList_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_5))) __PYX_ERR(2, 3347, __pyx_L31_error)
 3348:                 finally:
+3349:                     handle._unpin()
                /*finally:*/ {
                  /*normal exit:*/{
                    ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_v_handle);
                    goto __pyx_L32;
                  }
                  __pyx_L31_error:;
                  /*exception exit:*/{
                    __Pyx_PyThreadState_declare
                    __Pyx_PyThreadState_assign
                    __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0;
                    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
                    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
                     __Pyx_ExceptionSwap(&__pyx_t_28, &__pyx_t_29, &__pyx_t_30);
                    if ( unlikely(__Pyx_GetException(&__pyx_t_25, &__pyx_t_26, &__pyx_t_27) < 0)) __Pyx_ErrFetch(&__pyx_t_25, &__pyx_t_26, &__pyx_t_27);
                    __Pyx_XGOTREF(__pyx_t_25);
                    __Pyx_XGOTREF(__pyx_t_26);
                    __Pyx_XGOTREF(__pyx_t_27);
                    __Pyx_XGOTREF(__pyx_t_28);
                    __Pyx_XGOTREF(__pyx_t_29);
                    __Pyx_XGOTREF(__pyx_t_30);
                    __pyx_t_12 = __pyx_lineno; __pyx_t_23 = __pyx_clineno; __pyx_t_24 = __pyx_filename;
                    {
                      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_v_handle);
                    }
                    __Pyx_XGIVEREF(__pyx_t_28);
                    __Pyx_XGIVEREF(__pyx_t_29);
                    __Pyx_XGIVEREF(__pyx_t_30);
                    __Pyx_ExceptionReset(__pyx_t_28, __pyx_t_29, __pyx_t_30);
                    __Pyx_XGIVEREF(__pyx_t_25);
                    __Pyx_XGIVEREF(__pyx_t_26);
                    __Pyx_XGIVEREF(__pyx_t_27);
                    __Pyx_ErrRestore(__pyx_t_25, __pyx_t_26, __pyx_t_27);
                    __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0;
                    __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_23; __pyx_filename = __pyx_t_24;
                    goto __pyx_L19_error;
                  }
                  __pyx_L29_break: {
                    ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_v_handle);
                    goto __pyx_L24_try_break;
                  }
                  __pyx_L32:;
                }
+3350:             for col_idx in range(n_cols):
        __pyx_t_8 = __pyx_v_n_cols;
        __pyx_t_21 = __pyx_t_8;
        for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
          __pyx_v_col_idx = __pyx_t_22;
+3351:                 col_chunks[col_idx].append(batch_chunks[col_idx])
          __pyx_t_5 = __Pyx_GetItemInt_List(__pyx_v_col_chunks, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3351, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (unlikely(!__pyx_v_batch_chunks)) { __Pyx_RaiseUnboundLocalError("batch_chunks"); __PYX_ERR(2, 3351, __pyx_L5_error) }
          __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_batch_chunks, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3351, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_31 = __Pyx_PyObject_Append(__pyx_t_5, __pyx_t_4); if (unlikely(__pyx_t_31 == ((int)-1))) __PYX_ERR(2, 3351, __pyx_L5_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3352:                 col_masks[col_idx].append(batch_masks[col_idx])
          __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_col_masks, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 1, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3352, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (unlikely(!__pyx_v_batch_masks)) { __Pyx_RaiseUnboundLocalError("batch_masks"); __PYX_ERR(2, 3352, __pyx_L5_error) }
          __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_batch_masks, __pyx_v_col_idx, size_t, 0, __Pyx_PyLong_FromSize_t, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3352, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_31 = __Pyx_PyObject_Append(__pyx_t_4, __pyx_t_5); if (unlikely(__pyx_t_31 == ((int)-1))) __PYX_ERR(2, 3352, __pyx_L5_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
      }
      __pyx_L12_break:;
+3353:     except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._numpy_frame_from_cursor", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(2, 3353, __pyx_L7_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_6);
+3354:         handle._free()
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_free(__pyx_v_handle);
+3355:         raise
      __Pyx_GIVEREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_4, __pyx_t_6);
      __pyx_t_5 = 0;  __pyx_t_4 = 0;  __pyx_t_6 = 0; 
      __PYX_ERR(2, 3355, __pyx_L7_except_error)
    }
 3356: 
+3357:     try:
  /*try:*/ {
+3358:         _mark_reader_drained(handle)
    __pyx_t_9 = __pyx_f_7questdb_7_client__mark_reader_drained(__pyx_v_handle); if (unlikely(__pyx_t_9 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3358, __pyx_L67_error)
  }
 3359:     finally:
+3360:         handle._free()
  /*finally:*/ {
    /*normal exit:*/{
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_free(__pyx_v_handle);
      goto __pyx_L68;
    }
    __pyx_L67_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_2 = 0; __pyx_t_15 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_18, &__pyx_t_17);
      if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_13, &__pyx_t_2) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_18);
      __Pyx_XGOTREF(__pyx_t_17);
      __pyx_t_23 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_32 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_free(__pyx_v_handle);
      }
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_18, __pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ErrRestore(__pyx_t_14, __pyx_t_13, __pyx_t_2);
      __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_2 = 0; __pyx_t_15 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0;
      __pyx_lineno = __pyx_t_23; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_32;
      goto __pyx_L1_error;
    }
    __pyx_L68:;
  }
 3361: 
+3362:     if first:
  if (__pyx_v_first) {
/* … */
  }
+3363:         return pd.DataFrame()
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_v_pd;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_DataFrame, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3363, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
+3364:     return _numpy_assemble_frame(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_assemble_frame(((PyObject*)__pyx_t_6), ((PyObject*)__pyx_t_4), ((PyObject*)__pyx_t_5), ((PyObject*)__pyx_t_7), __pyx_v_col_chunks, __pyx_v_symbol_categories, __pyx_v_np, __pyx_v_pd, __pyx_v_col_masks, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
+3365:         col_names, col_kinds, col_scales, col_precision,
  __pyx_t_6 = __pyx_v_col_names;
  __Pyx_INCREF(__pyx_t_6);
  if (!(likely(PyList_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_6))) __PYX_ERR(2, 3365, __pyx_L1_error)
  __pyx_t_4 = __pyx_v_col_kinds;
  __Pyx_INCREF(__pyx_t_4);
  if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_4))) __PYX_ERR(2, 3365, __pyx_L1_error)
  __pyx_t_5 = __pyx_v_col_scales;
  __Pyx_INCREF(__pyx_t_5);
  if (!(likely(PyList_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_5))) __PYX_ERR(2, 3365, __pyx_L1_error)
  __pyx_t_7 = __pyx_v_col_precision;
  __Pyx_INCREF(__pyx_t_7);
  if (!(likely(PyList_CheckExact(__pyx_t_7))||((__pyx_t_7) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_7))) __PYX_ERR(2, 3365, __pyx_L1_error)
 3366:         col_chunks, symbol_categories, np, pd, col_masks)
 3367: 
 3368: 
+3369: cdef class _PolarsSymbolRegistry:
struct __pyx_obj_7questdb_7_client__PolarsSymbolRegistry {
  PyObject_HEAD
  PyObject *pl;
  PyObject *cats;
  PyObject *base;
  PyObject *pinned;
  Py_ssize_t n;
  int cat_to;
};

 3370:     """A polars ``Categories`` shared by every SYMBOL column on the same
 3371:     (append-only) connection dictionary — interned once and grown as the dict
 3372:     grows, so a QWP code is its own physical categorical code and casts straight
 3373:     into a ``Categorical`` with no per-row remap (the Rust ``SymbolRegistry``
 3374:     analog). The interned dictionary is pinned in ``base`` to stop polars'
 3375:     auto-GC mapping from dropping it between calls."""
 3376:     cdef object pl
 3377:     cdef object cats
 3378:     cdef object base
 3379:     cdef object pinned
 3380:     cdef Py_ssize_t n
 3381:     cdef bint cat_to
 3382: 
+3383:     def __cinit__(self, object pl):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_21_PolarsSymbolRegistry_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_21_PolarsSymbolRegistry_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_pl = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pl,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 3383, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3383, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(2, 3383, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(2, 3383, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3383, __pyx_L3_error)
    }
    __pyx_v_pl = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3383, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._PolarsSymbolRegistry.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_21_PolarsSymbolRegistry___cinit__(((struct __pyx_obj_7questdb_7_client__PolarsSymbolRegistry *)__pyx_v_self), __pyx_v_pl);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7_client_21_PolarsSymbolRegistry___cinit__(struct __pyx_obj_7questdb_7_client__PolarsSymbolRegistry *__pyx_v_self, PyObject *__pyx_v_pl) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._PolarsSymbolRegistry.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3384:         self.pl = pl
  __Pyx_INCREF(__pyx_v_pl);
  __Pyx_GIVEREF(__pyx_v_pl);
  __Pyx_GOTREF(__pyx_v_self->pl);
  __Pyx_DECREF(__pyx_v_self->pl);
  __pyx_v_self->pl = __pyx_v_pl;
+3385:         self.cats = pl.Categories.random('questdb_symbol', physical=pl.UInt32)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_pl, __pyx_mstate_global->__pyx_n_u_Categories); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_pl, __pyx_mstate_global->__pyx_n_u_UInt32); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_questdb_symbol};
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3385, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_physical, __pyx_t_4, __pyx_t_6, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 3385, __pyx_L1_error)
    __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_random, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3385, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->cats);
  __Pyx_DECREF(__pyx_v_self->cats);
  __pyx_v_self->cats = __pyx_t_1;
  __pyx_t_1 = 0;
+3386:         self.base = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->base);
  __Pyx_DECREF(__pyx_v_self->base);
  __pyx_v_self->base = Py_None;
+3387:         self.pinned = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->pinned);
  __Pyx_DECREF(__pyx_v_self->pinned);
  __pyx_v_self->pinned = Py_None;
+3388:         self.n = 0
  __pyx_v_self->n = 0;
 3389:         # polars >= 1.43 deprecates the physical-code `.cast(Categorical)` in
 3390:         # favour of `.cat.to(Categorical)`, which older polars lacks.
+3391:         self.cat_to = hasattr(pl.Series([], dtype=pl.UInt32).cat, 'to')
  __pyx_t_3 = __pyx_v_pl;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3391, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_pl, __pyx_mstate_global->__pyx_n_u_UInt32); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3391, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_6};
    __pyx_t_2 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3391, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_4, __pyx_t_2, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 3391, __pyx_L1_error)
    __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_Series, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3391, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_cat); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3391, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_7 = __Pyx_HasAttr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_to); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 3391, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_self->cat_to = __pyx_t_7;
 3392: 
+3393:     def accepts(self, object cats_arrow):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_21_PolarsSymbolRegistry_3accepts(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_21_PolarsSymbolRegistry_3accepts = {"accepts", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_21_PolarsSymbolRegistry_3accepts, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_21_PolarsSymbolRegistry_3accepts(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_cats_arrow = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("accepts (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_cats_arrow,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 3393, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3393, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "accepts", 0) < (0)) __PYX_ERR(2, 3393, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("accepts", 1, 1, 1, i); __PYX_ERR(2, 3393, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3393, __pyx_L3_error)
    }
    __pyx_v_cats_arrow = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("accepts", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3393, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._PolarsSymbolRegistry.accepts", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_21_PolarsSymbolRegistry_2accepts(((struct __pyx_obj_7questdb_7_client__PolarsSymbolRegistry *)__pyx_v_self), __pyx_v_cats_arrow);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_21_PolarsSymbolRegistry_2accepts(struct __pyx_obj_7questdb_7_client__PolarsSymbolRegistry *__pyx_v_self, PyObject *__pyx_v_cats_arrow) {
  Py_ssize_t __pyx_v_m;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client._PolarsSymbolRegistry.accepts", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_21_PolarsSymbolRegistry_3accepts, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PolarsSymbolRegistry_accepts, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[83])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client__PolarsSymbolRegistry, __pyx_mstate_global->__pyx_n_u_accepts, __pyx_t_18) < (0)) __PYX_ERR(2, 3393, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 3394:         # True if this registry's Categories maps `cats_arrow`'s codes
 3395:         # correctly: the smaller of (pinned, cats_arrow) must be a prefix of the
 3396:         # larger. The connection dict is append-only, so columns sharing it only
 3397:         # ever differ by a growth suffix; a column-local dict fails the check and
 3398:         # gets its own registry. `equals` short-circuits on the shared buffer.
 3399:         cdef Py_ssize_t m
+3400:         if self.pinned is None:
  __pyx_t_1 = (__pyx_v_self->pinned == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+3401:             return True
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    goto __pyx_L0;
+3402:         m = len(cats_arrow)
  __pyx_t_2 = PyObject_Length(__pyx_v_cats_arrow); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3402, __pyx_L1_error)
  __pyx_v_m = __pyx_t_2;
+3403:         if m <= self.n:
  __pyx_t_1 = (__pyx_v_m <= __pyx_v_self->n);
  if (__pyx_t_1) {
/* … */
  }
+3404:             return self.pinned.slice(0, m).equals(cats_arrow)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __pyx_v_self->pinned;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_7 = PyLong_FromSsize_t(__pyx_v_m); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3404, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_mstate_global->__pyx_int_0, __pyx_t_7};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_slice, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3404, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_t_4 = __pyx_t_5;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_cats_arrow};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_equals, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3404, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+3405:         return cats_arrow.slice(0, self.n).equals(self.pinned)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_7 = __pyx_v_cats_arrow;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_6 = PyLong_FromSsize_t(__pyx_v_self->n); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_mstate_global->__pyx_int_0, __pyx_t_6};
    __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_slice, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3405, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_5 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_self->pinned};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_equals, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3405, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 3406: 
+3407:     def column(self, object name, object codes, object cats_arrow):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_21_PolarsSymbolRegistry_5column(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_21_PolarsSymbolRegistry_5column = {"column", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_21_PolarsSymbolRegistry_5column, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_21_PolarsSymbolRegistry_5column(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_codes = 0;
  PyObject *__pyx_v_cats_arrow = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("column (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_name,&__pyx_mstate_global->__pyx_n_u_codes,&__pyx_mstate_global->__pyx_n_u_cats_arrow,0};
  PyObject* values[3] = {0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 3407, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 3407, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 3407, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3407, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "column", 0) < (0)) __PYX_ERR(2, 3407, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("column", 1, 3, 3, i); __PYX_ERR(2, 3407, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3407, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 3407, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 3407, __pyx_L3_error)
    }
    __pyx_v_name = values[0];
    __pyx_v_codes = values[1];
    __pyx_v_cats_arrow = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("column", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 3407, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._PolarsSymbolRegistry.column", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_21_PolarsSymbolRegistry_4column(((struct __pyx_obj_7questdb_7_client__PolarsSymbolRegistry *)__pyx_v_self), __pyx_v_name, __pyx_v_codes, __pyx_v_cats_arrow);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_21_PolarsSymbolRegistry_4column(struct __pyx_obj_7questdb_7_client__PolarsSymbolRegistry *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_codes, PyObject *__pyx_v_cats_arrow) {
  PyObject *__pyx_v_pl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_INCREF(__pyx_v_codes);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("questdb._client._PolarsSymbolRegistry.column", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pl);
  __Pyx_XDECREF(__pyx_v_codes);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_21_PolarsSymbolRegistry_5column, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PolarsSymbolRegistry_column, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[84])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7questdb_7_client__PolarsSymbolRegistry, __pyx_mstate_global->__pyx_n_u_column_2, __pyx_t_18) < (0)) __PYX_ERR(2, 3407, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+3408:         cdef object pl = self.pl
  __pyx_t_1 = __pyx_v_self->pl;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_pl = __pyx_t_1;
  __pyx_t_1 = 0;
+3409:         if cats_arrow is not None and len(cats_arrow) > self.n:
  __pyx_t_3 = (__pyx_v_cats_arrow != Py_None);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = PyObject_Length(__pyx_v_cats_arrow); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3409, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_4 > __pyx_v_self->n);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+3410:             self.base = pl.Series(
    __pyx_t_5 = __pyx_v_pl;
    __Pyx_INCREF(__pyx_t_5);
/* … */
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_v_self->base);
    __Pyx_DECREF(__pyx_v_self->base);
    __pyx_v_self->base = __pyx_t_1;
    __pyx_t_1 = 0;
+3411:                 pl.from_arrow(cats_arrow), dtype=pl.Categorical(self.cats))
    __pyx_t_7 = __pyx_v_pl;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_cats_arrow};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrow, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3411, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_t_9 = __pyx_v_pl;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_self->cats};
      __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_Categorical, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3411, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_5, __pyx_t_6};
      __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3410, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_7, __pyx_t_9, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 3410, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_Series, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3410, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
+3412:             self.pinned = cats_arrow
    __Pyx_INCREF(__pyx_v_cats_arrow);
    __Pyx_GIVEREF(__pyx_v_cats_arrow);
    __Pyx_GOTREF(__pyx_v_self->pinned);
    __Pyx_DECREF(__pyx_v_self->pinned);
    __pyx_v_self->pinned = __pyx_v_cats_arrow;
+3413:             self.n = len(cats_arrow)
    __pyx_t_4 = PyObject_Length(__pyx_v_cats_arrow); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3413, __pyx_L1_error)
    __pyx_v_self->n = __pyx_t_4;
+3414:         codes = codes.cast(pl.UInt32)
  __pyx_t_9 = __pyx_v_codes;
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_pl, __pyx_mstate_global->__pyx_n_u_UInt32); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_7};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_cast, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3414, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF_SET(__pyx_v_codes, __pyx_t_1);
  __pyx_t_1 = 0;
+3415:         if self.cat_to:
  if (__pyx_v_self->cat_to) {
/* … */
  }
+3416:             return codes.cat.to(pl.Categorical(self.cats)).alias(name)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_codes, __pyx_mstate_global->__pyx_n_u_cat); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3416, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __pyx_t_5;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_11 = __pyx_v_pl;
    __Pyx_INCREF(__pyx_t_11);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_v_self->cats};
      __pyx_t_10 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_Categorical, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 3416, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
    }
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_10};
      __pyx_t_9 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3416, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
    }
    __pyx_t_7 = __pyx_t_9;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_name};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_alias, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3416, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+3417:         return codes.cast(pl.Categorical(self.cats)).alias(name)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __pyx_v_codes;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_6 = __pyx_v_pl;
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_self->cats};
    __pyx_t_10 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_Categorical, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 3417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
  }
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_10};
    __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_cast, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_9 = __pyx_t_7;
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_8 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_name};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_alias, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3418: 
 3419: 
+3420: cdef tuple _polars_dict_codes_cats(object col, object pl):
static PyObject *__pyx_f_7questdb_7_client__polars_dict_codes_cats(PyObject *__pyx_v_col, PyObject *__pyx_v_pl) {
  PyObject *__pyx_v_chunks = 0;
  PyObject *__pyx_v_parts = 0;
  PyObject *__pyx_v_ch = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._polars_dict_codes_cats", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_chunks);
  __Pyx_XDECREF(__pyx_v_parts);
  __Pyx_XDECREF(__pyx_v_ch);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3421:     # col: a pyarrow ChunkedArray of dictionary type, one chunk per wire batch.
 3422:     # The dict is append-only and shared across the query — the Rust egress
 3423:     # attaches the full active connection dict to every batch and only ever grows
 3424:     # it (see `SymbolValuesCache` in c-questdb-client), and `Table.from_batches`
 3425:     # keeps the chunks in emission order — so the last chunk's dictionary is the
 3426:     # largest and covers every (global, stable) code. Returns (polars Series of
 3427:     # the dict indices with nulls preserved via Arrow validity, the full
 3428:     # dictionary values array). The indices flow straight from Arrow to polars
 3429:     # (no numpy round-trip, no -1 sentinel).
+3430:     cdef list chunks = col.chunks
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_chunks); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3430, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(2, 3430, __pyx_L1_error)
  __pyx_v_chunks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3431:     cdef list parts = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_parts = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 3432:     cdef object ch
+3433:     if not chunks:
  if (__pyx_v_chunks == Py_None) __pyx_t_2 = 0;
  else
  {
    Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_chunks);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(2, 3433, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
  }
+3434:         return (pl.Series([], dtype=pl.UInt32), None)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_v_pl;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3434, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pl, __pyx_mstate_global->__pyx_n_u_UInt32); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3434, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_4, __pyx_t_5};
      __pyx_t_8 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3434, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dtype, __pyx_t_6, __pyx_t_8, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 3434, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_Series, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3434, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3434, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1) != (0)) __PYX_ERR(2, 3434, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, Py_None) != (0)) __PYX_ERR(2, 3434, __pyx_L1_error);
    __pyx_t_1 = 0;
    __pyx_r = ((PyObject*)__pyx_t_8);
    __pyx_t_8 = 0;
    goto __pyx_L0;
+3435:     for ch in chunks:
  if (unlikely(__pyx_v_chunks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(2, 3435, __pyx_L1_error)
  }
  __pyx_t_8 = __pyx_v_chunks; __Pyx_INCREF(__pyx_t_8);
  __pyx_t_9 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_8);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 3435, __pyx_L1_error)
      #endif
      if (__pyx_t_9 >= __pyx_temp) break;
    }
    __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_8, __pyx_t_9, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_9;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3435, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_ch, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+3436:         parts.append(pl.from_arrow(ch.indices))
    __pyx_t_6 = __pyx_v_pl;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_ch, __pyx_mstate_global->__pyx_n_u_indices); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3436, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrow, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3436, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_parts, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(2, 3436, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3437:     return (pl.concat(parts) if len(parts) > 1 else parts[0],
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_9 = __Pyx_PyList_GET_SIZE(__pyx_v_parts); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3437, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_9 > 1);
  if (__pyx_t_3) {
    __pyx_t_5 = __pyx_v_pl;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_parts};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_concat, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3437, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_8 = __pyx_t_1;
    __pyx_t_1 = 0;
  } else {
    __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_parts, 0, long, 1, __Pyx_PyLong_From_long, 1, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = __pyx_t_1;
    __pyx_t_1 = 0;
  }
/* … */
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_8);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8) != (0)) __PYX_ERR(2, 3437, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5) != (0)) __PYX_ERR(2, 3437, __pyx_L1_error);
  __pyx_t_8 = 0;
  __pyx_t_5 = 0;
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
+3438:             chunks[-1].dictionary)
  if (unlikely(__pyx_v_chunks == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 3438, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_chunks, -1L, long, 1, __Pyx_PyLong_From_long, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_dictionary); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3439: 
 3440: 
+3441: cdef object _cast_to_string_view(object col, object svt, object pa, object pc):
static PyObject *__pyx_f_7questdb_7_client__cast_to_string_view(PyObject *__pyx_v_col, PyObject *__pyx_v_svt, PyObject *__pyx_v_pa, PyObject *__pyx_v_pc) {
  PyObject *__pyx_v_chunks = 0;
  PyObject *__pyx_v_empty = 0;
  PyObject *__pyx_v_ch = 0;
  PyObject *__pyx_v_view = 0;
  PyObject *__pyx_v_bufs = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("questdb._client._cast_to_string_view", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_chunks);
  __Pyx_XDECREF(__pyx_v_empty);
  __Pyx_XDECREF(__pyx_v_ch);
  __Pyx_XDECREF(__pyx_v_view);
  __Pyx_XDECREF(__pyx_v_bufs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_23_polars_nonsymbol_frame_2generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 3442:     # Cast a Utf8 / LargeUtf8 ChunkedArray to Arrow ``string_view``, repairing the
 3443:     # null trailing variadic data buffer that pyarrow's cast leaves behind for a
 3444:     # chunk whose every value is inline (<= 12 bytes). The null buffer validates
 3445:     # fine in-process, but the Arrow C-Data-Interface exporter dereferences it
 3446:     # unconditionally — so it crashes (SIGSEGV) the moment polars re-exports the
 3447:     # column across the C-ABI. Swapping the null for a shared 0-length buffer is
 3448:     # zero-copy and makes the export safe. A natively built string_view already
 3449:     # uses an empty (non-null) buffer here, so only the cast output needs fixing.
+3450:     cdef list chunks = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3450, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_chunks = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3451:     cdef object empty = None
  __Pyx_INCREF(Py_None);
  __pyx_v_empty = Py_None;
 3452:     cdef object ch, view, bufs
+3453:     for ch in col.chunks:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_mstate_global->__pyx_n_u_chunks); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3453, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
    __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3453, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3453, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 3453, __pyx_L1_error)
          #endif
          if (__pyx_t_3 >= __pyx_temp) break;
        }
        __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_2, __pyx_t_3, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_3;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 3453, __pyx_L1_error)
          #endif
          if (__pyx_t_3 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3));
        #else
        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3);
        #endif
        ++__pyx_t_3;
      }
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3453, __pyx_L1_error)
    } else {
      __pyx_t_1 = __pyx_t_4(__pyx_t_2);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 3453, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_ch, __pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3454:         view = pc.cast(ch, svt)
    __pyx_t_5 = __pyx_v_pc;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_ch, __pyx_v_svt};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_cast, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3454, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_view, __pyx_t_1);
    __pyx_t_1 = 0;
+3455:         bufs = view.buffers()
    __pyx_t_5 = __pyx_v_view;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_buffers, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3455, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_bufs, __pyx_t_1);
    __pyx_t_1 = 0;
+3456:         if bufs and bufs[-1] is None:
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_bufs); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(2, 3456, __pyx_L1_error)
    if (__pyx_t_8) {
    } else {
      __pyx_t_7 = __pyx_t_8;
      goto __pyx_L6_bool_binop_done;
    }
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_bufs, -1L, long, 1, __Pyx_PyLong_From_long, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3456, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = (__pyx_t_1 == Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = __pyx_t_8;
    __pyx_L6_bool_binop_done:;
    if (__pyx_t_7) {
/* … */
    }
+3457:             if empty is None:
      __pyx_t_7 = (__pyx_v_empty == Py_None);
      if (__pyx_t_7) {
/* … */
      }
+3458:                 empty = pa.allocate_buffer(0)
        __pyx_t_5 = __pyx_v_pa;
        __Pyx_INCREF(__pyx_t_5);
        __pyx_t_6 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_int_0};
          __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_allocate_buffer, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3458, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF_SET(__pyx_v_empty, __pyx_t_1);
        __pyx_t_1 = 0;
+3459:             view = pa.Array.from_buffers(
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_Array); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3459, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_5 = __pyx_t_9;
      __Pyx_INCREF(__pyx_t_5);
+3460:                 svt, len(view), bufs[:-1] + [empty],
      __pyx_t_10 = PyObject_Length(__pyx_v_view); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3460, __pyx_L1_error)
      __pyx_t_11 = PyLong_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3460, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = __Pyx_PyObject_GetSlice(__pyx_v_bufs, 0, -1L, NULL, NULL, &__pyx_mstate_global->__pyx_slice[1], 0, 1, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 3460, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_13 = PyList_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 3460, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_INCREF(__pyx_v_empty);
      __Pyx_GIVEREF(__pyx_v_empty);
      if (__Pyx_PyList_SET_ITEM(__pyx_t_13, 0, __pyx_v_empty) != (0)) __PYX_ERR(2, 3460, __pyx_L1_error);
      __pyx_t_14 = PyNumber_Add(__pyx_t_12, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 3460, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
/* … */
  __pyx_mstate_global->__pyx_slice[1] = PySlice_New(Py_None, __pyx_mstate_global->__pyx_int_neg_1, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_slice[1])) __PYX_ERR(2, 3460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_slice[1]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[1]);
+3461:                 null_count=view.null_count, offset=view.offset)
      __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_view, __pyx_mstate_global->__pyx_n_u_null_count); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 3461, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_view, __pyx_mstate_global->__pyx_n_u_offset); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 3461, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_6 = 0;
      {
        PyObject *__pyx_callargs[4 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_5, __pyx_v_svt, __pyx_t_11, __pyx_t_14};
        __pyx_t_15 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3459, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_null_count, __pyx_t_13, __pyx_t_15, __pyx_callargs+4, 0) < (0)) __PYX_ERR(2, 3459, __pyx_L1_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_offset, __pyx_t_12, __pyx_t_15, __pyx_callargs+4, 1) < (0)) __PYX_ERR(2, 3459, __pyx_L1_error)
        __pyx_t_1 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_from_buffers, __pyx_callargs+__pyx_t_6, (4-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_15);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3459, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF_SET(__pyx_v_view, __pyx_t_1);
      __pyx_t_1 = 0;
+3462:         chunks.append(view)
    __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_chunks, __pyx_v_view); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(2, 3462, __pyx_L1_error)
+3463:     return pa.chunked_array(chunks, type=svt)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_v_pa;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_6 = 0;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_1, __pyx_v_chunks};
    __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3463, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_type, __pyx_v_svt, __pyx_t_9, __pyx_callargs+2, 0) < (0)) __PYX_ERR(2, 3463, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_VectorcallMethod_CallFromBuilder((PyObject*)__pyx_mstate_global->__pyx_n_u_chunked_array, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3463, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 3464: 
 3465: 
+3466: cdef object _polars_nonsymbol_frame(
static PyObject *__pyx_f_7questdb_7_client__polars_nonsymbol_frame(PyObject *__pyx_v_table, PyObject *__pyx_v_nd_idx, PyObject *__pyx_v_pl, PyObject *__pyx_v_pa) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_4___pyx_f_7questdb_7_client__polars_nonsymbol_frame *__pyx_cur_scope;
  PyObject *__pyx_v_tbl = 0;
  PyObject *__pyx_v_types = 0;
  PyObject *__pyx_v_sv = 0;
  PyObject *__pyx_v_svt = 0;
  Py_ssize_t __pyx_v_j;
  PyObject *__pyx_v_pc = NULL;
  PyObject *__pyx_gb_7questdb_7_client_23_polars_nonsymbol_frame_2generator5 = 0;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_4___pyx_f_7questdb_7_client__polars_nonsymbol_frame *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_4___pyx_f_7questdb_7_client__polars_nonsymbol_frame(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_4___pyx_f_7questdb_7_client__polars_nonsymbol_frame, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_4___pyx_f_7questdb_7_client__polars_nonsymbol_frame *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(2, 3466, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_pa = __pyx_v_pa;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pa);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pa);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("questdb._client._polars_nonsymbol_frame", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tbl);
  __Pyx_XDECREF(__pyx_v_types);
  __Pyx_XDECREF(__pyx_v_sv);
  __Pyx_XDECREF(__pyx_v_svt);
  __Pyx_XDECREF(__pyx_v_pc);
  __Pyx_XDECREF(__pyx_gb_7questdb_7_client_23_polars_nonsymbol_frame_2generator5);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_4___pyx_f_7questdb_7_client__polars_nonsymbol_frame {
  PyObject_HEAD
  PyObject *__pyx_v_pa;
};

 3467:         object table, list nd_idx, object pl, object pa):
 3468:     # `pl.from_arrow` for the non-SYMBOL columns. Utf8 / LargeUtf8 columns are
 3469:     # first cast to Arrow `string_view` (when pyarrow exposes it) so polars
 3470:     # adopts the byte/view buffers zero-copy — its `String` dtype *is* the view
 3471:     # ("German strings") layout — instead of rebuilding the view from the offset
 3472:     # layout. Fixed-width columns are already adopted zero-copy.
+3473:     if not nd_idx:
  if (__pyx_v_nd_idx == Py_None) __pyx_t_1 = 0;
  else
  {
    Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_nd_idx);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(2, 3473, __pyx_L1_error)
    __pyx_t_1 = (__pyx_temp != 0);
  }

  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {
/* … */
  }
+3474:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+3475:     cdef object tbl = table.select(nd_idx)
  __pyx_t_4 = __pyx_v_table;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_nd_idx};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_select, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3475, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_v_tbl = __pyx_t_3;
  __pyx_t_3 = 0;
+3476:     cdef object types = tbl.schema.types
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_tbl, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_types = __pyx_t_4;
  __pyx_t_4 = 0;
+3477:     cdef object sv = getattr(pa, 'string_view', None)
  __pyx_t_4 = __pyx_cur_scope->__pyx_v_pa;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_GetAttr3(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_string_view, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_sv = __pyx_t_3;
  __pyx_t_3 = 0;
 3478:     cdef object svt
 3479:     cdef Py_ssize_t j
+3480:     if sv is not None and any(
      __Pyx_XDECREF(__pyx_r);
/* … */
    __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_1 = (__pyx_v_sv != Py_None);
  if (__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }
/* … */
  if (__pyx_t_2) {
/* … */
  }
+3481:             pa.types.is_string(t) or pa.types.is_large_string(t) for t in types):
static PyObject *__pyx_pf_7questdb_7_client_23_polars_nonsymbol_frame_genexpr(PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_5_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_5_genexpr *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_5_genexpr(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_5_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_5_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(2, 3481, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_4___pyx_f_7questdb_7_client__polars_nonsymbol_frame *) __pyx_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_23_polars_nonsymbol_frame_2generator5, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[3]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_polars_nonsymbol_frame_locals_g, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(2, 3481, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._polars_nonsymbol_frame.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_7questdb_7_client_23_polars_nonsymbol_frame_2generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(2, 3481, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(2, 3481, __pyx_L1_error) }
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_genexpr_arg_0)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_genexpr_arg_0; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3481, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 3481, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_2;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 3481, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
        #endif
        ++__pyx_t_2;
      }
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3481, __pyx_L1_error)
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 3481, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_t);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_t, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_pa)) { __Pyx_RaiseClosureNameError("pa"); __PYX_ERR(2, 3481, __pyx_L1_error) }
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = __pyx_t_7;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_cur_scope->__pyx_v_t};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_string, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3481, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(2, 3481, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!__pyx_t_9) {
    } else {
      __pyx_t_5 = __pyx_t_9;
      goto __pyx_L7_bool_binop_done;
    }
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_pa)) { __Pyx_RaiseClosureNameError("pa"); __PYX_ERR(2, 3481, __pyx_L1_error) }
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __pyx_t_6;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_cur_scope->__pyx_v_t};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_large_string, __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3481, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(2, 3481, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = __pyx_t_9;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_5) {
/* … */
      __Pyx_INCREF(Py_True);
      __pyx_r = Py_True;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;
    }
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  /*else*/ {
/* … */
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_3 = __pyx_pf_7questdb_7_client_23_polars_nonsymbol_frame_genexpr(((PyObject*)__pyx_cur_scope), __pyx_v_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_Generator_GetInlinedResult(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 3481, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_5_genexpr {
  PyObject_HEAD
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_4___pyx_f_7questdb_7_client__polars_nonsymbol_frame *__pyx_outer_scope;
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_t;
};

+3482:         import pyarrow.compute as pc
    __pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pyarrow_compute, 0, 0, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3482, __pyx_L1_error)
    __pyx_t_7 = __Pyx_ImportFrom(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_compute);
    Py_DECREF(__pyx_t_6);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3482, __pyx_L1_error)
    __pyx_t_6 = __pyx_t_7;
    __pyx_t_4 = __pyx_t_6;
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_pc = __pyx_t_4;
    __pyx_t_4 = 0;
+3483:         svt = sv()
    __pyx_t_3 = NULL;
    __Pyx_INCREF(__pyx_v_sv);
    __pyx_t_8 = __pyx_v_sv; 
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3483, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_v_svt = __pyx_t_4;
    __pyx_t_4 = 0;
+3484:         for j in range(len(types)):
    __pyx_t_9 = PyObject_Length(__pyx_v_types); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3484, __pyx_L1_error)
    __pyx_t_10 = __pyx_t_9;
    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
      __pyx_v_j = __pyx_t_11;
+3485:             if pa.types.is_string(types[j]) or pa.types.is_large_string(types[j]):
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3485, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = __pyx_t_3;
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_types, __pyx_v_j, Py_ssize_t, 1, PyLong_FromSsize_t, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 3485, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_12};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_string, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3485, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 3485, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (!__pyx_t_1) {
      } else {
        __pyx_t_2 = __pyx_t_1;
        goto __pyx_L10_bool_binop_done;
      }
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 3485, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_3 = __pyx_t_12;
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_types, __pyx_v_j, Py_ssize_t, 1, PyLong_FromSsize_t, 0, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3485, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_8};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_large_string, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3485, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 3485, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_2 = __pyx_t_1;
      __pyx_L10_bool_binop_done:;
      if (__pyx_t_2) {
/* … */
      }
    }
+3486:                 tbl = tbl.set_column(
        __pyx_t_12 = __pyx_v_tbl;
        __Pyx_INCREF(__pyx_t_12);
+3487:                     j, tbl.schema.field(j).with_type(svt),
        __pyx_t_8 = PyLong_FromSsize_t(__pyx_v_j); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3487, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_tbl, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 3487, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_15 = __pyx_t_16;
        __Pyx_INCREF(__pyx_t_15);
        __pyx_t_17 = PyLong_FromSsize_t(__pyx_v_j); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3487, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_t_17};
          __pyx_t_14 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_field, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 3487, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
        }
        __pyx_t_13 = __pyx_t_14;
        __Pyx_INCREF(__pyx_t_13);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_v_svt};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_with_type, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3487, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
+3488:                     _cast_to_string_view(tbl.column(j), svt, pa, pc))
        __pyx_t_13 = __pyx_v_tbl;
        __Pyx_INCREF(__pyx_t_13);
        __pyx_t_16 = PyLong_FromSsize_t(__pyx_v_j); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 3488, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_16};
          __pyx_t_14 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_column_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 3488, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
        }
        __pyx_t_16 = __pyx_cur_scope->__pyx_v_pa;
        __Pyx_INCREF(__pyx_t_16);
        __pyx_t_13 = __pyx_f_7questdb_7_client__cast_to_string_view(__pyx_t_14, __pyx_v_svt, __pyx_t_16, __pyx_v_pc); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 3488, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_5 = 0;
        {
          PyObject *__pyx_callargs[4] = {__pyx_t_12, __pyx_t_8, __pyx_t_3, __pyx_t_13};
          __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_set_column, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3486, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_DECREF_SET(__pyx_v_tbl, __pyx_t_4);
        __pyx_t_4 = 0;
+3489:     return pl.from_arrow(tbl)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_13 = __pyx_v_pl;
  __Pyx_INCREF(__pyx_t_13);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_v_tbl};
    __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrow, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3489, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 3490: 
 3491: 
+3492: cdef object _polars_dataframe_hybrid(
static PyObject *__pyx_f_7questdb_7_client__polars_dataframe_hybrid(PyObject *__pyx_v_table, PyObject *__pyx_v_pl, PyObject *__pyx_v_pa, PyObject *__pyx_v_registries) {
  PyObject *__pyx_v_types = 0;
  PyObject *__pyx_v_is_dict = 0;
  PyObject *__pyx_v_names = 0;
  PyObject *__pyx_v_nd_idx = 0;
  PyObject *__pyx_v_nd = NULL;
  PyObject *__pyx_v_cols = 0;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_codes = 0;
  PyObject *__pyx_v_cats = 0;
  PyObject *__pyx_v_reg = 0;
  PyObject *__pyx_v_shared = 0;
  PyObject *__pyx_9genexpr13__pyx_v_t = NULL;
  Py_ssize_t __pyx_9genexpr14__pyx_v_i;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._polars_dataframe_hybrid", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_types);
  __Pyx_XDECREF(__pyx_v_is_dict);
  __Pyx_XDECREF(__pyx_v_names);
  __Pyx_XDECREF(__pyx_v_nd_idx);
  __Pyx_XDECREF(__pyx_v_nd);
  __Pyx_XDECREF(__pyx_v_cols);
  __Pyx_XDECREF(__pyx_v_codes);
  __Pyx_XDECREF(__pyx_v_cats);
  __Pyx_XDECREF(__pyx_v_reg);
  __Pyx_XDECREF(__pyx_v_shared);
  __Pyx_XDECREF(__pyx_9genexpr13__pyx_v_t);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3493:         object table, object pl, object pa, dict registries):
 3494:     # SYMBOL (dictionary) columns are built from codes + dict via a `Categories`
 3495:     # registry (low CPU, no per-row remap); every other column keeps its exact
 3496:     # `pl.from_arrow` dtype. One shared registry (key -1) serves every column on
 3497:     # the connection dict — interned once, not per column — and falls back to a
 3498:     # per-column registry for a column-local dict. `registries` persists across
 3499:     # batches so a streaming `iter_polars` stitches via one `Categories`.
+3500:     cdef list types = table.schema.types
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(2, 3500, __pyx_L1_error)
  __pyx_v_types = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+3501:     cdef list is_dict = [pa.types.is_dictionary(t) for t in types]
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3501, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (unlikely(__pyx_v_types == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(2, 3501, __pyx_L5_error)
    }
    __pyx_t_1 = __pyx_v_types; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = 0;
    for (;;) {
      {
        Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 3501, __pyx_L5_error)
        #endif
        if (__pyx_t_3 >= __pyx_temp) break;
      }
      __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_3, __Pyx_ReferenceSharing_OwnStrongReference);
      ++__pyx_t_3;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3501, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_XDECREF_SET(__pyx_9genexpr13__pyx_v_t, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3501, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __pyx_t_6;
      __Pyx_INCREF(__pyx_t_5);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_9genexpr13__pyx_v_t};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_dictionary, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3501, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(2, 3501, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_9genexpr13__pyx_v_t); __pyx_9genexpr13__pyx_v_t = 0;
    goto __pyx_L9_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_9genexpr13__pyx_v_t); __pyx_9genexpr13__pyx_v_t = 0;
    goto __pyx_L1_error;
    __pyx_L9_exit_scope:;
  } /* exit inner scope */
  __pyx_v_is_dict = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+3502:     if not any(is_dict):
  __pyx_t_1 = NULL;
  __pyx_t_7 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_is_dict};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_any, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3502, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(2, 3502, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_9 = (!__pyx_t_8);
  if (__pyx_t_9) {
/* … */
  }
+3503:         return pl.from_arrow(table)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_v_pl;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_table};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrow, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3503, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
+3504:     cdef list names = table.column_names
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_column_names); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3504, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_2))) __PYX_ERR(2, 3504, __pyx_L1_error)
  __pyx_v_names = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+3505:     cdef list nd_idx = [i for i in range(len(types)) if not is_dict[i]]
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (unlikely(__pyx_v_types == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(2, 3505, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_PyList_GET_SIZE(__pyx_v_types); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3505, __pyx_L1_error)
    __pyx_t_10 = __pyx_t_3;
    for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
      __pyx_9genexpr14__pyx_v_i = __pyx_t_11;
      __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_is_dict, __pyx_9genexpr14__pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3505, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(2, 3505, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = (!__pyx_t_9);
      if (__pyx_t_8) {
        __pyx_t_1 = PyLong_FromSsize_t(__pyx_9genexpr14__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3505, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) __PYX_ERR(2, 3505, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
    }
  } /* exit inner scope */
  __pyx_v_nd_idx = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
+3506:     nd = _polars_nonsymbol_frame(table, nd_idx, pl, pa)
  __pyx_t_2 = __pyx_f_7questdb_7_client__polars_nonsymbol_frame(__pyx_v_table, __pyx_v_nd_idx, __pyx_v_pl, __pyx_v_pa); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_nd = __pyx_t_2;
  __pyx_t_2 = 0;
+3507:     cdef list cols = []
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_cols = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 3508:     cdef Py_ssize_t i
 3509:     cdef object codes, cats, reg
+3510:     cdef object shared = registries.get(-1)
  if (unlikely(__pyx_v_registries == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(2, 3510, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_registries, __pyx_mstate_global->__pyx_int_neg_1, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_shared = __pyx_t_2;
  __pyx_t_2 = 0;
+3511:     for i in range(len(types)):
  if (unlikely(__pyx_v_types == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 3511, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_PyList_GET_SIZE(__pyx_v_types); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3511, __pyx_L1_error)
  __pyx_t_10 = __pyx_t_3;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;
+3512:         if is_dict[i]:
    __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_is_dict, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3512, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(2, 3512, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_8) {
/* … */
      goto __pyx_L16;
    }
+3513:             codes, cats = _polars_dict_codes_cats(table.column(i), pl)
      __pyx_t_1 = __pyx_v_table;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_4 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3513, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_4};
        __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_column_2, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3513, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __pyx_t_4 = __pyx_f_7questdb_7_client__polars_dict_codes_cats(__pyx_t_2, __pyx_v_pl); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3513, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (likely(__pyx_t_4 != Py_None)) {
        PyObject* sequence = __pyx_t_4;
        Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(2, 3513, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_1);
        #else
        __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3513, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3513, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 3513, __pyx_L1_error)
      }
      __Pyx_XDECREF_SET(__pyx_v_codes, __pyx_t_2);
      __pyx_t_2 = 0;
      __Pyx_XDECREF_SET(__pyx_v_cats, __pyx_t_1);
      __pyx_t_1 = 0;
+3514:             if shared is None:
      __pyx_t_8 = (__pyx_v_shared == Py_None);
      if (__pyx_t_8) {
/* … */
      }
+3515:                 shared = _PolarsSymbolRegistry(pl)
        __pyx_t_1 = NULL;
        __pyx_t_7 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_pl};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__PolarsSymbolRegistry, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3515, __pyx_L1_error)
          __Pyx_GOTREF((PyObject *)__pyx_t_4);
        }
        __Pyx_DECREF_SET(__pyx_v_shared, ((PyObject *)__pyx_t_4));
        __pyx_t_4 = 0;
+3516:                 registries[-1] = shared
        if (unlikely(__pyx_v_registries == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(2, 3516, __pyx_L1_error)
        }
        if (unlikely((PyDict_SetItem(__pyx_v_registries, __pyx_mstate_global->__pyx_int_neg_1, __pyx_v_shared) < 0))) __PYX_ERR(2, 3516, __pyx_L1_error)
+3517:             if shared.accepts(cats):
      __pyx_t_1 = __pyx_v_shared;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_cats};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_accepts, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3517, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(2, 3517, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_8) {
/* … */
        goto __pyx_L18;
      }
+3518:                 reg = shared
        __Pyx_INCREF(__pyx_v_shared);
        __Pyx_XDECREF_SET(__pyx_v_reg, __pyx_v_shared);
 3519:             else:
+3520:                 reg = registries.get(i)
      /*else*/ {
        if (unlikely(__pyx_v_registries == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
          __PYX_ERR(2, 3520, __pyx_L1_error)
        }
        __pyx_t_4 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3520, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_registries, __pyx_t_4, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3520, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF_SET(__pyx_v_reg, __pyx_t_1);
        __pyx_t_1 = 0;
+3521:                 if reg is None:
        __pyx_t_8 = (__pyx_v_reg == Py_None);
        if (__pyx_t_8) {
/* … */
        }
      }
      __pyx_L18:;
+3522:                     reg = _PolarsSymbolRegistry(pl)
          __pyx_t_4 = NULL;
          __pyx_t_7 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_pl};
            __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__PolarsSymbolRegistry, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3522, __pyx_L1_error)
            __Pyx_GOTREF((PyObject *)__pyx_t_1);
          }
          __Pyx_DECREF_SET(__pyx_v_reg, ((PyObject *)__pyx_t_1));
          __pyx_t_1 = 0;
+3523:                     registries[i] = reg
          if (unlikely(__pyx_v_registries == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(2, 3523, __pyx_L1_error)
          }
          __pyx_t_1 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3523, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely((PyDict_SetItem(__pyx_v_registries, __pyx_t_1, __pyx_v_reg) < 0))) __PYX_ERR(2, 3523, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3524:             cols.append(reg.column(names[i], codes, cats))
      __pyx_t_4 = __pyx_v_reg;
      __Pyx_INCREF(__pyx_t_4);
      if (unlikely(__pyx_v_names == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 3524, __pyx_L1_error)
      }
      __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_names, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3524, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_t_2, __pyx_v_codes, __pyx_v_cats};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_column_2, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3524, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_cols, __pyx_t_1); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(2, 3524, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 3525:         else:
+3526:             cols.append(nd.get_column(names[i]))
    /*else*/ {
      __pyx_t_2 = __pyx_v_nd;
      __Pyx_INCREF(__pyx_t_2);
      if (unlikely(__pyx_v_names == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 3526, __pyx_L1_error)
      }
      __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_names, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3526, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_column, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3526, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_cols, __pyx_t_1); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(2, 3526, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __pyx_L16:;
  }
+3527:     return pl.DataFrame(cols)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __pyx_v_pl;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_cols};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_DataFrame, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3527, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3528: 
 3529: 
+3530: cdef str _polars_fallback_warning(object exc):
static PyObject *__pyx_f_7questdb_7_client__polars_fallback_warning(PyObject *__pyx_v_exc) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._polars_fallback_warning", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3531:     return (
  __Pyx_XDECREF(__pyx_r);
+3532:         'The polars Categorical fast path failed '
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_3, 5, 41 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 148, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1));
  if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3532, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;
+3533:         f'({type(exc).__name__}: {exc}); the frame was built with '
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_exc)), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_1, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_The_polars_Categorical_fast_path;
  __pyx_t_3[1] = __pyx_t_2;
  __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u_;
  __pyx_t_3[3] = __pyx_t_1;
  __pyx_t_3[4] = __pyx_mstate_global->__pyx_kp_u_the_frame_was_built_with_polars;
 3534:         '`polars.from_arrow` instead, which is slower. Please report this '
 3535:         'at https://github.com/questdb/py-questdb-client/issues.')
 3536: 
 3537: 
+3538: cdef object _polars_hybrid_fallback(object table, object pl, object exc):
static PyObject *__pyx_f_7questdb_7_client__polars_hybrid_fallback(PyObject *__pyx_v_table, PyObject *__pyx_v_pl, PyObject *__pyx_v_exc) {
  PyObject *__pyx_v_frame = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._polars_hybrid_fallback", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_frame);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3539:     # polars marks the `Categories` API as unstable, so a new release can
 3540:     # break the hybrid path. `pl.from_arrow` gives the same values, only
 3541:     # slower, so fall back, but do not hide the failure.
 3542:     # cdef frames and this module's def entry points are invisible to the
 3543:     # warnings stack walker, so level 1 is already the user's call.
+3544:     frame = pl.from_arrow(table)
  __pyx_t_2 = __pyx_v_pl;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_table};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrow, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3544, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_frame = __pyx_t_1;
  __pyx_t_1 = 0;
+3545:     warnings.warn(_polars_fallback_warning(exc), RuntimeWarning, stacklevel=1)
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_warnings); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_warn); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_f_7questdb_7_client__polars_fallback_warning(__pyx_v_exc); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
    __pyx_t_3 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_2, __pyx_t_4, ((PyObject *)(((PyTypeObject*)PyExc_RuntimeWarning)))};
    __pyx_t_6 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_stacklevel, __pyx_mstate_global->__pyx_int_1, __pyx_t_6, __pyx_callargs+3, 0) < (0)) __PYX_ERR(2, 3545, __pyx_L1_error)
    __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3546:     return frame
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_frame);
  __pyx_r = __pyx_v_frame;
  goto __pyx_L0;
 3547: 
 3548: 
+3549: cdef tuple _polars_frame_with_registry_cats(
static PyObject *__pyx_f_7questdb_7_client__polars_frame_with_registry_cats(PyObject *__pyx_v_frame, PyObject *__pyx_v_table, PyObject *__pyx_v_pl, PyObject *__pyx_v_pa, PyObject *__pyx_v_registries) {
  PyObject *__pyx_v_types = 0;
  PyObject *__pyx_v_names = 0;
  PyObject *__pyx_v_exprs = 0;
  Py_ssize_t __pyx_v_i;
  struct __pyx_obj_7questdb_7_client__PolarsSymbolRegistry *__pyx_v_reg = 0;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_INCREF(__pyx_v_frame);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("questdb._client._polars_frame_with_registry_cats", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_types);
  __Pyx_XDECREF(__pyx_v_names);
  __Pyx_XDECREF(__pyx_v_exprs);
  __Pyx_XDECREF((PyObject *)__pyx_v_reg);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_v_frame);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3550:         object frame, object table, object pl, object pa, dict registries):
 3551:     # Give a `pl.from_arrow` frame the registry `Categories` of the hybrid
 3552:     # frames that `iter_polars` yielded before it, so that `pl.concat` still
 3553:     # stitches. Without a registry, every frame is a plain Categorical.
 3554:     # Returns `(frame, exc)`: `exc` is the cast failure, or None.
 3555:     cdef list types
 3556:     cdef list names
+3557:     cdef list exprs = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_exprs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 3558:     cdef Py_ssize_t i
 3559:     cdef _PolarsSymbolRegistry reg
+3560:     if not registries:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_registries); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 3560, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
  }
+3561:         return (frame, None)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3561, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_frame);
    __Pyx_GIVEREF(__pyx_v_frame);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_frame) != (0)) __PYX_ERR(2, 3561, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None) != (0)) __PYX_ERR(2, 3561, __pyx_L1_error);
    __pyx_r = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
+3562:     types = table.schema.types
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_4))) __PYX_ERR(2, 3562, __pyx_L1_error)
  __pyx_v_types = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+3563:     names = table.column_names
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_column_names); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_4))) __PYX_ERR(2, 3563, __pyx_L1_error)
  __pyx_v_names = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+3564:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L7_except_return:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L0;
    __pyx_L9_try_end:;
  }
+3565:         for i in range(len(types)):
      if (unlikely(__pyx_v_types == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
        __PYX_ERR(2, 3565, __pyx_L4_error)
      }
      __pyx_t_8 = __Pyx_PyList_GET_SIZE(__pyx_v_types); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3565, __pyx_L4_error)
      __pyx_t_9 = __pyx_t_8;
      for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
        __pyx_v_i = __pyx_t_10;
+3566:             if pa.types.is_dictionary(types[i]):
        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_types); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3566, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_1 = __pyx_t_11;
        __Pyx_INCREF(__pyx_t_1);
        if (unlikely(__pyx_v_types == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(2, 3566, __pyx_L4_error)
        }
        __pyx_t_12 = __Pyx_GetItemInt_List(__pyx_v_types, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 3566, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_13 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_12};
          __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_dictionary, __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3566, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 3566, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (__pyx_t_3) {
/* … */
        }
      }
+3567:                 reg = registries.get(i) or registries.get(-1)
          if (unlikely(__pyx_v_registries == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
            __PYX_ERR(2, 3567, __pyx_L4_error)
          }
          __pyx_t_11 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3567, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_12 = __Pyx_PyDict_GetItemDefault(__pyx_v_registries, __pyx_t_11, Py_None); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 3567, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 3567, __pyx_L4_error)
          if (!__pyx_t_3) {
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          } else {
            if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__PolarsSymbolRegistry))))) __PYX_ERR(2, 3567, __pyx_L4_error)
            __Pyx_INCREF(__pyx_t_12);
            __pyx_t_4 = __pyx_t_12;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            goto __pyx_L13_bool_binop_done;
          }
          if (unlikely(__pyx_v_registries == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
            __PYX_ERR(2, 3567, __pyx_L4_error)
          }
          __pyx_t_12 = __Pyx_PyDict_GetItemDefault(__pyx_v_registries, __pyx_mstate_global->__pyx_int_neg_1, Py_None); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 3567, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__PolarsSymbolRegistry))))) __PYX_ERR(2, 3567, __pyx_L4_error)
          __Pyx_INCREF(__pyx_t_12);
          __pyx_t_4 = __pyx_t_12;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_L13_bool_binop_done:;
          __Pyx_XDECREF_SET(__pyx_v_reg, ((struct __pyx_obj_7questdb_7_client__PolarsSymbolRegistry *)__pyx_t_4));
          __pyx_t_4 = 0;
+3568:                 if reg is not None:
          __pyx_t_3 = (((PyObject *)__pyx_v_reg) != Py_None);
          if (__pyx_t_3) {
/* … */
          }
+3569:                     exprs.append(
            __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_exprs, __pyx_t_4); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(2, 3569, __pyx_L4_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3570:                         pl.col(names[i]).cast(pl.Categorical(reg.cats)))
            __pyx_t_1 = __pyx_v_pl;
            __Pyx_INCREF(__pyx_t_1);
            if (unlikely(__pyx_v_names == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(2, 3570, __pyx_L4_error)
            }
            __pyx_t_14 = __Pyx_GetItemInt_List(__pyx_v_names, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 3570, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_13 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_14};
              __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_col, __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
              if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3570, __pyx_L4_error)
              __Pyx_GOTREF(__pyx_t_11);
            }
            __pyx_t_12 = __pyx_t_11;
            __Pyx_INCREF(__pyx_t_12);
            __pyx_t_1 = __pyx_v_pl;
            __Pyx_INCREF(__pyx_t_1);
            __pyx_t_13 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_reg->cats};
              __pyx_t_14 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_Categorical, __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 3570, __pyx_L4_error)
              __Pyx_GOTREF(__pyx_t_14);
            }
            __pyx_t_13 = 0;
            {
              PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_14};
              __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_cast, __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
              __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
              if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3570, __pyx_L4_error)
              __Pyx_GOTREF(__pyx_t_4);
            }
+3571:         if exprs:
      {
        Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_exprs);
        if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(2, 3571, __pyx_L4_error)
        __pyx_t_3 = (__pyx_temp != 0);
      }

      if (__pyx_t_3) {
/* … */
      }
+3572:             frame = frame.with_columns(exprs)
        __pyx_t_11 = __pyx_v_frame;
        __Pyx_INCREF(__pyx_t_11);
        __pyx_t_13 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_v_exprs};
          __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_with_columns, __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3572, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_4);
        __pyx_t_4 = 0;
+3573:     except Exception as exc:
    __pyx_t_16 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_16) {
      __Pyx_AddTraceback("questdb._client._polars_frame_with_registry_cats", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_14) < 0) __PYX_ERR(2, 3573, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_11);
      __pyx_v_exc = __pyx_t_11;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L22_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __pyx_t_16 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
          goto __pyx_L6_except_error;
        }
        __pyx_L21_return: {
          __pyx_t_25 = __pyx_r;
          __pyx_r = 0;
          __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          __pyx_r = __pyx_t_25;
          __pyx_t_25 = 0;
          goto __pyx_L7_except_return;
        }
      }
    }
    goto __pyx_L6_except_error;
 3574:         # The cast uses the `Categories` API that the fallback works
 3575:         # around, so it can fail the same way. Keep the values, stop
 3576:         # casting, and let the caller warn: `pl.concat` with the earlier
 3577:         # frames fails.
+3578:         registries.clear()
        if (unlikely(__pyx_v_registries == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
          __PYX_ERR(2, 3578, __pyx_L22_error)
        }
        __pyx_t_15 = __Pyx_PyDict_Clear(__pyx_v_registries); if (unlikely(__pyx_t_15 == ((int)-1))) __PYX_ERR(2, 3578, __pyx_L22_error)
+3579:         return (frame, exc)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 3579, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_INCREF(__pyx_v_frame);
        __Pyx_GIVEREF(__pyx_v_frame);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_v_frame) != (0)) __PYX_ERR(2, 3579, __pyx_L22_error);
        __Pyx_INCREF(__pyx_v_exc);
        __Pyx_GIVEREF(__pyx_v_exc);
        if (__Pyx_PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_exc) != (0)) __PYX_ERR(2, 3579, __pyx_L22_error);
        __pyx_r = ((PyObject*)__pyx_t_12);
        __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        goto __pyx_L21_return;
      }
+3580:     return (frame, None)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 3580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_INCREF(__pyx_v_frame);
  __Pyx_GIVEREF(__pyx_v_frame);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v_frame) != (0)) __PYX_ERR(2, 3580, __pyx_L1_error);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 1, Py_None) != (0)) __PYX_ERR(2, 3580, __pyx_L1_error);
  __pyx_r = ((PyObject*)__pyx_t_14);
  __pyx_t_14 = 0;
  goto __pyx_L0;
 3581: 
 3582: 
+3583: cdef class _PolarsBatchIter:
struct __pyx_obj_7questdb_7_client__PolarsBatchIter {
  PyObject_HEAD
  PyObject *reader;
  PyObject *pl;
  PyObject *pa;
  PyObject *registries;
  int use_hybrid;
  int hybrid_yielded;
  PyObject *pending;
};

 3584:     """Streaming `polars.DataFrame` per result batch. Holds the per-symbol
 3585:     `Categories` registries so every batch's Categoricals share one identity
 3586:     and `pl.concat` stitches cleanly."""
 3587:     cdef object reader
 3588:     cdef object pl
 3589:     cdef object pa
 3590:     cdef dict registries
 3591:     cdef bint use_hybrid
 3592:     cdef bint hybrid_yielded
 3593:     # A built frame whose warning raised (`-W error`): the next call
 3594:     # returns it, so that no batch is lost.
 3595:     cdef object pending
 3596: 
+3597:     def __cinit__(self, _CursorHandle handle, object pl, object pa):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_16_PolarsBatchIter_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_16_PolarsBatchIter_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  PyObject *__pyx_v_pl = 0;
  PyObject *__pyx_v_pa = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_handle,&__pyx_mstate_global->__pyx_n_u_pl,&__pyx_mstate_global->__pyx_n_u_pa,0};
  PyObject* values[3] = {0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 3597, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 3597, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 3597, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3597, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(2, 3597, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, i); __PYX_ERR(2, 3597, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3597, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 3597, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_VARARGS(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 3597, __pyx_L3_error)
    }
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)values[0]);
    __pyx_v_pl = values[1];
    __pyx_v_pa = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 3597, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._PolarsBatchIter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_handle), __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle, 1, "handle", 0))) __PYX_ERR(2, 3597, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_16_PolarsBatchIter___cinit__(((struct __pyx_obj_7questdb_7_client__PolarsBatchIter *)__pyx_v_self), __pyx_v_handle, __pyx_v_pl, __pyx_v_pa);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7_client_16_PolarsBatchIter___cinit__(struct __pyx_obj_7questdb_7_client__PolarsBatchIter *__pyx_v_self, struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle, PyObject *__pyx_v_pl, PyObject *__pyx_v_pa) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._PolarsBatchIter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3598:         self.reader = _build_record_batch_reader(handle)
  __pyx_t_1 = __pyx_f_7questdb_7_client__build_record_batch_reader(__pyx_v_handle, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3598, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->reader);
  __Pyx_DECREF(__pyx_v_self->reader);
  __pyx_v_self->reader = __pyx_t_1;
  __pyx_t_1 = 0;
+3599:         self.pl = pl
  __Pyx_INCREF(__pyx_v_pl);
  __Pyx_GIVEREF(__pyx_v_pl);
  __Pyx_GOTREF(__pyx_v_self->pl);
  __Pyx_DECREF(__pyx_v_self->pl);
  __pyx_v_self->pl = __pyx_v_pl;
+3600:         self.pa = pa
  __Pyx_INCREF(__pyx_v_pa);
  __Pyx_GIVEREF(__pyx_v_pa);
  __Pyx_GOTREF(__pyx_v_self->pa);
  __Pyx_DECREF(__pyx_v_self->pa);
  __pyx_v_self->pa = __pyx_v_pa;
+3601:         self.registries = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->registries);
  __Pyx_DECREF(__pyx_v_self->registries);
  __pyx_v_self->registries = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3602:         self.use_hybrid = getattr(pl, 'Categories', None) is not None
  __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_pl, __pyx_mstate_global->__pyx_n_u_Categories, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 != Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_self->use_hybrid = __pyx_t_2;
+3603:         self.hybrid_yielded = False
  __pyx_v_self->hybrid_yielded = 0;
+3604:         self.pending = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->pending);
  __Pyx_DECREF(__pyx_v_self->pending);
  __pyx_v_self->pending = Py_None;
 3605: 
+3606:     def __iter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_16_PolarsBatchIter_3__iter__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_16_PolarsBatchIter_3__iter__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_16_PolarsBatchIter_2__iter__(((struct __pyx_obj_7questdb_7_client__PolarsBatchIter *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_16_PolarsBatchIter_2__iter__(struct __pyx_obj_7questdb_7_client__PolarsBatchIter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3607:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 3608: 
+3609:     def __next__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_16_PolarsBatchIter_5__next__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_16_PolarsBatchIter_5__next__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__next__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_16_PolarsBatchIter_4__next__(((struct __pyx_obj_7questdb_7_client__PolarsBatchIter *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_16_PolarsBatchIter_4__next__(struct __pyx_obj_7questdb_7_client__PolarsBatchIter *__pyx_v_self) {
  PyObject *__pyx_v_msgs = 0;
  PyObject *__pyx_v_frame = NULL;
  PyObject *__pyx_v_batch = NULL;
  PyObject *__pyx_v_table = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_v_cast_exc = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client._PolarsBatchIter.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_msgs);
  __Pyx_XDECREF(__pyx_v_frame);
  __Pyx_XDECREF(__pyx_v_batch);
  __Pyx_XDECREF(__pyx_v_table);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_v_cast_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3610:         cdef list msgs = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3610, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msgs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3611:         frame = self.pending
  __pyx_t_1 = __pyx_v_self->pending;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_frame = __pyx_t_1;
  __pyx_t_1 = 0;
+3612:         if frame is not None:
  __pyx_t_2 = (__pyx_v_frame != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+3613:             self.pending = None
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->pending);
    __Pyx_DECREF(__pyx_v_self->pending);
    __pyx_v_self->pending = Py_None;
+3614:             return frame
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_frame);
    __pyx_r = __pyx_v_frame;
    goto __pyx_L0;
+3615:         batch = next(self.reader)
  __pyx_t_1 = __pyx_v_self->reader;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyIter_Next(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_batch = __pyx_t_3;
  __pyx_t_3 = 0;
+3616:         table = self.pa.Table.from_batches([batch])
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->pa, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_batch);
  __Pyx_GIVEREF(__pyx_v_batch);
  if (__Pyx_PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_batch) != (0)) __PYX_ERR(2, 3616, __pyx_L1_error);
  __pyx_t_6 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_5};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_batches, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3616, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_v_table = __pyx_t_3;
  __pyx_t_3 = 0;
+3617:         if self.use_hybrid:
  if (__pyx_v_self->use_hybrid) {
/* … */
    goto __pyx_L4;
  }
+3618:             try:
    {
      /*try:*/ {
/* … */
      }
/* … */
      __pyx_L7_except_error:;
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
      goto __pyx_L1_error;
      __pyx_L8_except_return:;
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
      goto __pyx_L0;
      __pyx_L6_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    }
+3619:                 frame = _polars_dataframe_hybrid(
        __pyx_t_1 = __pyx_f_7questdb_7_client__polars_dataframe_hybrid(__pyx_v_table, __pyx_t_3, __pyx_t_4, ((PyObject*)__pyx_t_5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3619, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_1);
        __pyx_t_1 = 0;
+3620:                     table, self.pl, self.pa, self.registries)
        __pyx_t_3 = __pyx_v_self->pl;
        __Pyx_INCREF(__pyx_t_3);
        __pyx_t_4 = __pyx_v_self->pa;
        __Pyx_INCREF(__pyx_t_4);
        __pyx_t_5 = __pyx_v_self->registries;
        __Pyx_INCREF(__pyx_t_5);
+3621:             except Exception as exc:
      __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_10) {
        __Pyx_AddTraceback("questdb._client._PolarsBatchIter.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_4) < 0) __PYX_ERR(2, 3621, __pyx_L7_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_5);
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __pyx_v_exc = __pyx_t_5;
        /*try:*/ {
/* … */
        /*finally:*/ {
          /*normal exit:*/{
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            goto __pyx_L17;
          }
          __pyx_L16_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
            if ( unlikely(__Pyx_GetException(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
            __Pyx_XGOTREF(__pyx_t_15);
            __Pyx_XGOTREF(__pyx_t_16);
            __Pyx_XGOTREF(__pyx_t_17);
            __Pyx_XGOTREF(__pyx_t_18);
            __Pyx_XGOTREF(__pyx_t_19);
            __Pyx_XGOTREF(__pyx_t_20);
            __pyx_t_10 = __pyx_lineno; __pyx_t_13 = __pyx_clineno; __pyx_t_14 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_18);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_XGIVEREF(__pyx_t_16);
            __Pyx_XGIVEREF(__pyx_t_17);
            __Pyx_ErrRestore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
            __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0;
            __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_13; __pyx_filename = __pyx_t_14;
            goto __pyx_L7_except_error;
          }
          __pyx_L17:;
        }
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        goto __pyx_L6_exception_handled;
      }
      goto __pyx_L7_except_error;
 3622:                 # One warning per iterator: the remaining batches take the
 3623:                 # fallback too, cast to the registries' `Categories`, so
 3624:                 # every yielded frame has the same dtypes.
+3625:                 self.use_hybrid = False
          __pyx_v_self->use_hybrid = 0;
+3626:                 if not self.hybrid_yielded:
          __pyx_t_2 = (!__pyx_v_self->hybrid_yielded);
          if (__pyx_t_2) {
/* … */
          }
 3627:                     # No yielded frame uses the registries: plain frames
 3628:                     # stitch, and the cast would only cost a string remap.
+3629:                     self.registries.clear()
            if (unlikely(__pyx_v_self->registries == Py_None)) {
              PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
              __PYX_ERR(2, 3629, __pyx_L16_error)
            }
            __pyx_t_11 = __Pyx_PyDict_Clear(__pyx_v_self->registries); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 3629, __pyx_L16_error)
+3630:                 msgs.append(_polars_fallback_warning(exc))
          __pyx_t_3 = __pyx_f_7questdb_7_client__polars_fallback_warning(__pyx_v_exc); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3630, __pyx_L16_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_msgs, __pyx_t_3); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 3630, __pyx_L16_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3631:                 frame = self.pl.from_arrow(table)
          __pyx_t_12 = __pyx_v_self->pl;
          __Pyx_INCREF(__pyx_t_12);
          __pyx_t_6 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_table};
            __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrow, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3631, __pyx_L16_error)
            __Pyx_GOTREF(__pyx_t_3);
          }
          __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_3);
          __pyx_t_3 = 0;
        }
 3632:             else:
+3633:                 self.hybrid_yielded = True
      /*else:*/ {
        __pyx_v_self->hybrid_yielded = 1;
+3634:                 return frame
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_frame);
        __pyx_r = __pyx_v_frame;
        goto __pyx_L8_except_return;
      }
      __pyx_L5_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
 3635:         else:
+3636:             frame = self.pl.from_arrow(table)
  /*else*/ {
    __pyx_t_5 = __pyx_v_self->pl;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_table};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrow, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3636, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_4);
    __pyx_t_4 = 0;
  }
  __pyx_L4:;
+3637:         frame, cast_exc = _polars_frame_with_registry_cats(
  __pyx_t_3 = __pyx_f_7questdb_7_client__polars_frame_with_registry_cats(__pyx_v_frame, __pyx_v_table, __pyx_t_4, __pyx_t_5, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3637, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (likely(__pyx_t_3 != Py_None)) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(2, 3637, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3637, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3637, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 3637, __pyx_L1_error)
  }
  __Pyx_DECREF_SET(__pyx_v_frame, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_cast_exc = __pyx_t_5;
  __pyx_t_5 = 0;
+3638:             frame, table, self.pl, self.pa, self.registries)
  __pyx_t_4 = __pyx_v_self->pl;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = __pyx_v_self->pa;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_1 = __pyx_v_self->registries;
  __Pyx_INCREF(__pyx_t_1);
+3639:         if cast_exc is not None:
  __pyx_t_2 = (__pyx_v_cast_exc != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+3640:             msgs.append(
    __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_msgs, __pyx_t_1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(2, 3640, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3641:                 'The cast to the Categories of the frames before failed '
    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_21, 5, 56 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 192, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3642:                 f'({type(cast_exc).__name__}: {cast_exc}); this frame and '
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_cast_exc)), __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3642, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3642, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_cast_exc, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3642, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_21[0] = __pyx_mstate_global->__pyx_kp_u_The_cast_to_the_Categories_of_th;
    __pyx_t_21[1] = __pyx_t_5;
    __pyx_t_21[2] = __pyx_mstate_global->__pyx_kp_u_;
    __pyx_t_21[3] = __pyx_t_3;
    __pyx_t_21[4] = __pyx_mstate_global->__pyx_kp_u_this_frame_and_the_following_on;
 3643:                 'the following ones have a plain Categorical dtype, so '
 3644:                 '`polars.concat` with the frames before fails. Please '
 3645:                 'report this at '
 3646:                 'https://github.com/questdb/py-questdb-client/issues.')
 3647:         # One warning, after the frame is built: under `-W error` the
 3648:         # warning raises, and the frame must not be lost with it.
+3649:         if msgs:
  {
    Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_msgs);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(2, 3649, __pyx_L1_error)
    __pyx_t_2 = (__pyx_temp != 0);
  }

  if (__pyx_t_2) {
/* … */
  }
+3650:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L30_try_end;
      __pyx_L25_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
      __pyx_L27_except_error:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
      goto __pyx_L1_error;
      __pyx_L30_try_end:;
    }
+3651:                 warnings.warn(' '.join(msgs), RuntimeWarning, stacklevel=1)
        __pyx_t_3 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_warnings); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3651, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_warn); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3651, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__19, __pyx_v_msgs); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3651, __pyx_L25_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
          assert(__pyx_t_3);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
          __pyx_t_6 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_3, __pyx_t_5, ((PyObject *)(((PyTypeObject*)PyExc_RuntimeWarning)))};
          __pyx_t_12 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 3651, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_stacklevel, __pyx_mstate_global->__pyx_int_1, __pyx_t_12, __pyx_callargs+3, 0) < (0)) __PYX_ERR(2, 3651, __pyx_L25_error)
          __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_12);
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3651, __pyx_L25_error)
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3652:             except BaseException:
      __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_13) {
        __Pyx_AddTraceback("questdb._client._PolarsBatchIter.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_12) < 0) __PYX_ERR(2, 3652, __pyx_L27_except_error)
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_4);
        __Pyx_XGOTREF(__pyx_t_12);
+3653:                 self.pending = frame
        __Pyx_INCREF(__pyx_v_frame);
        __Pyx_GIVEREF(__pyx_v_frame);
        __Pyx_GOTREF(__pyx_v_self->pending);
        __Pyx_DECREF(__pyx_v_self->pending);
        __pyx_v_self->pending = __pyx_v_frame;
+3654:                 raise
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_4, __pyx_t_12);
        __pyx_t_1 = 0;  __pyx_t_4 = 0;  __pyx_t_12 = 0; 
        __PYX_ERR(2, 3654, __pyx_L27_except_error)
      }
      goto __pyx_L27_except_error;
+3655:         return frame
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_frame);
  __pyx_r = __pyx_v_frame;
  goto __pyx_L0;
 3656: 
 3657: 
+3658: cdef class _NumpyBatchIter:
struct __pyx_obj_7questdb_7_client__NumpyBatchIter {
  PyObject_HEAD
  struct __pyx_obj_7questdb_7_client__CursorHandle *handle;
  PyObject *np;
  PyObject *pd;
  PyObject *col_names;
  PyObject *col_kinds;
  PyObject *col_scales;
  PyObject *col_precision;
  PyObject *claim;
  PyObject *pinned_meta;
  PyObject *pinned_names_b;
  int first;
  int has_symbol;
  int done;
  size_t prev_dict_n;
  PyObject *symbol_categories;
  PyObject *symbol_dtype;
  int seen_seq;
  int delivered;
};

 3659:     cdef _CursorHandle handle
 3660:     cdef object np
 3661:     cdef object pd
 3662:     cdef list col_names
 3663:     cdef list col_kinds
 3664:     cdef list col_scales
 3665:     cdef list col_precision
 3666:     cdef object claim
 3667:     cdef tuple pinned_meta
 3668:     cdef list pinned_names_b
 3669:     cdef bint first
 3670:     cdef bint has_symbol
 3671:     cdef bint done
 3672:     cdef size_t prev_dict_n
 3673:     cdef list symbol_categories
 3674:     cdef object symbol_dtype
 3675:     cdef int seen_seq
 3676:     cdef bint delivered
 3677: 
+3678:     def __cinit__(self, _CursorHandle handle):
/* Python wrapper */
static int __pyx_pw_7questdb_7_client_15_NumpyBatchIter_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7questdb_7_client_15_NumpyBatchIter_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_handle,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 3678, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3678, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(2, 3678, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(2, 3678, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3678, __pyx_L3_error)
    }
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3678, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._NumpyBatchIter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_handle), __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle, 1, "handle", 0))) __PYX_ERR(2, 3678, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_15_NumpyBatchIter___cinit__(((struct __pyx_obj_7questdb_7_client__NumpyBatchIter *)__pyx_v_self), __pyx_v_handle);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7questdb_7_client_15_NumpyBatchIter___cinit__(struct __pyx_obj_7questdb_7_client__NumpyBatchIter *__pyx_v_self, struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle) {
  PyObject *__pyx_v_np = NULL;
  PyObject *__pyx_v_pd = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._NumpyBatchIter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_np);
  __Pyx_XDECREF(__pyx_v_pd);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3679:         import numpy as np
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_numpy, 0, 0, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3679, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_np = __pyx_t_1;
  __pyx_t_1 = 0;
+3680:         import pandas as pd
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pandas_2, 0, 0, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3680, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_pd = __pyx_t_1;
  __pyx_t_1 = 0;
+3681:         self.handle = handle
  __Pyx_INCREF((PyObject *)__pyx_v_handle);
  __Pyx_GIVEREF((PyObject *)__pyx_v_handle);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->handle);
  __Pyx_DECREF((PyObject *)__pyx_v_self->handle);
  __pyx_v_self->handle = __pyx_v_handle;
+3682:         self.np = np
  __Pyx_INCREF(__pyx_v_np);
  __Pyx_GIVEREF(__pyx_v_np);
  __Pyx_GOTREF(__pyx_v_self->np);
  __Pyx_DECREF(__pyx_v_self->np);
  __pyx_v_self->np = __pyx_v_np;
+3683:         self.pd = pd
  __Pyx_INCREF(__pyx_v_pd);
  __Pyx_GIVEREF(__pyx_v_pd);
  __Pyx_GOTREF(__pyx_v_self->pd);
  __Pyx_DECREF(__pyx_v_self->pd);
  __pyx_v_self->pd = __pyx_v_pd;
+3684:         self.col_names = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3684, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->col_names);
  __Pyx_DECREF(__pyx_v_self->col_names);
  __pyx_v_self->col_names = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3685:         self.col_kinds = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3685, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->col_kinds);
  __Pyx_DECREF(__pyx_v_self->col_kinds);
  __pyx_v_self->col_kinds = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3686:         self.col_scales = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->col_scales);
  __Pyx_DECREF(__pyx_v_self->col_scales);
  __pyx_v_self->col_scales = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3687:         self.col_precision = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->col_precision);
  __Pyx_DECREF(__pyx_v_self->col_precision);
  __pyx_v_self->col_precision = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3688:         self.claim = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->claim);
  __Pyx_DECREF(__pyx_v_self->claim);
  __pyx_v_self->claim = Py_None;
+3689:         self.first = True
  __pyx_v_self->first = 1;
+3690:         self.has_symbol = False
  __pyx_v_self->has_symbol = 0;
+3691:         self.done = False
  __pyx_v_self->done = 0;
+3692:         self.prev_dict_n = 0
  __pyx_v_self->prev_dict_n = 0;
+3693:         self.symbol_categories = []
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->symbol_categories);
  __Pyx_DECREF(__pyx_v_self->symbol_categories);
  __pyx_v_self->symbol_categories = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3694:         self.symbol_dtype = None
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->symbol_dtype);
  __Pyx_DECREF(__pyx_v_self->symbol_dtype);
  __pyx_v_self->symbol_dtype = Py_None;
+3695:         self.seen_seq = (
  __pyx_v_self->seen_seq = __pyx_t_3;
+3696:             handle._reset_sequence() if handle is not None else 0)
  __pyx_t_4 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_4) {
    __pyx_t_5 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_reset_sequence(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3696, __pyx_L1_error)
    __pyx_t_3 = __pyx_t_5;
  } else {
    __pyx_t_3 = 0;
  }
+3697:         self.delivered = False
  __pyx_v_self->delivered = 0;
 3698: 
+3699:     def __iter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15_NumpyBatchIter_3__iter__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_15_NumpyBatchIter_3__iter__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_15_NumpyBatchIter_2__iter__(((struct __pyx_obj_7questdb_7_client__NumpyBatchIter *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_15_NumpyBatchIter_2__iter__(struct __pyx_obj_7questdb_7_client__NumpyBatchIter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3700:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 3701: 
+3702:     def __next__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_15_NumpyBatchIter_5__next__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7questdb_7_client_15_NumpyBatchIter_5__next__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__next__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_7questdb_7_client_15_NumpyBatchIter_4__next__(((struct __pyx_obj_7questdb_7_client__NumpyBatchIter *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_15_NumpyBatchIter_4__next__(struct __pyx_obj_7questdb_7_client__NumpyBatchIter *__pyx_v_self) {
  struct qwp_reader_cursor *__pyx_v_cursor;
  questdb_error *__pyx_v_err;
  struct qwp_reader_batch const *__pyx_v_batch;
  struct qwp_reader_symbol_dict __pyx_v_sd;
  size_t __pyx_v_row_count;
  size_t __pyx_v_n_cols;
  PyObject *__pyx_v_batch_chunks = NULL;
  PyObject *__pyx_v_batch_masks = NULL;
  PyObject *__pyx_v_col_chunks = NULL;
  PyObject *__pyx_v_col_masks = NULL;
  PyObject *__pyx_v_frame = NULL;
  PyObject *__pyx_9genexpr15__pyx_v_c = NULL;
  PyObject *__pyx_9genexpr16__pyx_v_m = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_31);
  __Pyx_XDECREF(__pyx_t_32);
  __Pyx_XDECREF(__pyx_t_33);
  __Pyx_XDECREF(__pyx_t_34);
  if (!__pyx_error_without_exception) {
    __Pyx_AddTraceback("questdb._client._NumpyBatchIter.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_batch_chunks);
  __Pyx_XDECREF(__pyx_v_batch_masks);
  __Pyx_XDECREF(__pyx_v_col_chunks);
  __Pyx_XDECREF(__pyx_v_col_masks);
  __Pyx_XDECREF(__pyx_v_frame);
  __Pyx_XDECREF(__pyx_9genexpr15__pyx_v_c);
  __Pyx_XDECREF(__pyx_9genexpr16__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3703:         cdef qwp_reader_cursor* cursor
+3704:         cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 3705:         cdef const qwp_reader_batch* batch
 3706:         cdef qwp_reader_symbol_dict sd
 3707:         cdef size_t row_count
 3708:         cdef size_t n_cols
+3709:         if self.done or self.handle is None:
  if (!__pyx_v_self->done) {
  } else {
    __pyx_t_1 = __pyx_v_self->done;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (((PyObject *)__pyx_v_self->handle) == Py_None);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+3710:             raise StopIteration
    __pyx_error_without_exception = 1;
    goto __pyx_L1_error;;
 3711:         # A rejected nested call must neither wait on the outer pull's lock
 3712:         # nor enter cleanup that marks this shared iterator done.
+3713:         self.handle._check_not_driving('iter_numpy', check_lock=True)
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.check_lock = 1;
  __pyx_t_3 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->handle->__pyx_vtab)->_check_not_driving(__pyx_v_self->handle, __pyx_mstate_global->__pyx_n_u_iter_numpy, &__pyx_t_4); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3713, __pyx_L1_error)
+3714:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L11_try_end;
    __pyx_L6_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
    __Pyx_XDECREF(__pyx_t_32); __pyx_t_32 = 0;
    __Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
    __Pyx_XDECREF(__pyx_t_34); __pyx_t_34 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L8_except_error:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L11_try_end:;
  }
+3715:             with self.handle._lock:
      /*with:*/ {
        __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3715, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_10 = NULL;
        __pyx_t_11 = __Pyx_PyObject_LookupSpecial(__pyx_v_self->handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3715, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = 1;
        #if CYTHON_UNPACK_METHODS
        if (likely(PyMethod_Check(__pyx_t_11))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
          assert(__pyx_t_10);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
          __pyx_t_12 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_10, NULL};
          __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_12, (1-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3715, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_9);
        }
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        /*try:*/ {
          {
            /*try:*/ {
/* … */
            }
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            goto __pyx_L21_try_end;
            __pyx_L16_error:;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
            __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
            __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            /*except:*/ {
              __Pyx_AddTraceback("questdb._client._NumpyBatchIter.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_17, &__pyx_t_11, &__pyx_t_10) < 0) __PYX_ERR(2, 3715, __pyx_L18_except_error)
              __Pyx_XGOTREF(__pyx_t_17);
              __Pyx_XGOTREF(__pyx_t_11);
              __Pyx_XGOTREF(__pyx_t_10);
              __pyx_t_20 = PyTuple_Pack(3, __pyx_t_17, __pyx_t_11, __pyx_t_10); if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 3715, __pyx_L18_except_error)
              __Pyx_GOTREF(__pyx_t_20);
              __pyx_t_29 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_20, NULL);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
              if (unlikely(!__pyx_t_29)) __PYX_ERR(2, 3715, __pyx_L18_except_error)
              __Pyx_GOTREF(__pyx_t_29);
              __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_29);
              __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
              if (__pyx_t_1 < (0)) __PYX_ERR(2, 3715, __pyx_L18_except_error)
              __pyx_t_2 = (!__pyx_t_1);
              if (unlikely(__pyx_t_2)) {
                __Pyx_GIVEREF(__pyx_t_17);
                __Pyx_GIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_10);
                __Pyx_ErrRestoreWithState(__pyx_t_17, __pyx_t_11, __pyx_t_10);
                __pyx_t_17 = 0;  __pyx_t_11 = 0;  __pyx_t_10 = 0; 
                __PYX_ERR(2, 3715, __pyx_L18_except_error)
              }
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
              goto __pyx_L17_exception_handled;
            }
            __pyx_L18_except_error:;
            __Pyx_XGIVEREF(__pyx_t_13);
            __Pyx_XGIVEREF(__pyx_t_14);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
            goto __pyx_L6_error;
            __pyx_L17_exception_handled:;
            __Pyx_XGIVEREF(__pyx_t_13);
            __Pyx_XGIVEREF(__pyx_t_14);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
            __pyx_L21_try_end:;
          }
        }
        /*finally:*/ {
          /*normal exit:*/{
            if (__pyx_t_8) {
              __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_mstate_global->__pyx_tuple[3], NULL);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 3715, __pyx_L6_error)
              __Pyx_GOTREF(__pyx_t_15);
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            }
            goto __pyx_L15;
          }
          __pyx_L15:;
        }
        goto __pyx_L46;
        __pyx_L12_error:;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L6_error;
        __pyx_L46:;
      }
+3716:                 cursor = self.handle._cursor
              __pyx_t_16 = __pyx_v_self->handle->_cursor;
              __pyx_v_cursor = __pyx_t_16;
+3717:                 if cursor == NULL:
              __pyx_t_1 = (__pyx_v_cursor == NULL);
              if (unlikely(__pyx_t_1)) {
/* … */
              }
+3718:                     raise QuestDBError(
                __pyx_t_11 = NULL;
                __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 3718, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_10);
+3719:                         QuestDBErrorCode.InvalidApiCall, 'cursor is closed')
                __Pyx_GetModuleGlobalName(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3719, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_17);
                __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3719, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_18);
                __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                __pyx_t_12 = 1;
                #if CYTHON_UNPACK_METHODS
                if (unlikely(PyMethod_Check(__pyx_t_10))) {
                  __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
                  assert(__pyx_t_11);
                  PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10);
                  __Pyx_INCREF(__pyx_t_11);
                  __Pyx_INCREF(__pyx__function);
                  __Pyx_DECREF_SET(__pyx_t_10, __pyx__function);
                  __pyx_t_12 = 0;
                }
                #endif
                {
                  PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_t_18, __pyx_mstate_global->__pyx_kp_u_cursor_is_closed};
                  __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_12, (3-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
                  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                  if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3718, __pyx_L16_error)
                  __Pyx_GOTREF(__pyx_t_9);
                }
                __Pyx_Raise(__pyx_t_9, 0, 0, 0);
                __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                __PYX_ERR(2, 3718, __pyx_L16_error)
+3720:                 self.handle._check_not_driving('iter_numpy')
              __pyx_t_3 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->handle->__pyx_vtab)->_check_not_driving(__pyx_v_self->handle, __pyx_mstate_global->__pyx_n_u_iter_numpy, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3720, __pyx_L16_error)
+3721:                 self.handle._pin()
              ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->handle->__pyx_vtab)->_pin(__pyx_v_self->handle);
+3722:                 try:
              /*try:*/ {
+3723:                     self.handle._native_in_flight = True
                __pyx_v_self->handle->_native_in_flight = 1;
+3724:                     try:
                /*try:*/ {
+3725:                         with nogil:
                  {
                      PyThreadState * _save;
                      _save = PyEval_SaveThread();
                      __Pyx_FastGIL_Remember();
                      /*try:*/ {
/* … */
                      /*finally:*/ {
                        /*normal exit:*/{
                          __Pyx_FastGIL_Forget();
                          PyEval_RestoreThread(_save);
                          goto __pyx_L31;
                        }
                        __pyx_L31:;
                      }
                  }
                }
+3726:                             batch = qwp_reader_cursor_next_batch(
                        __pyx_v_batch = qwp_reader_cursor_next_batch(__pyx_v_cursor, (&__pyx_v_err));
                      }
 3727:                                 cursor, &err)
 3728:                     finally:
+3729:                         self.handle._native_in_flight = False
                /*finally:*/ {
                  /*normal exit:*/{
                    __pyx_v_self->handle->_native_in_flight = 0;
                    goto __pyx_L28;
                  }
                  __pyx_L28:;
                }
+3730:                     if err == NULL:
                __pyx_t_1 = (__pyx_v_err == NULL);
                if (__pyx_t_1) {
/* … */
                }
+3731:                         _oidc_raise_unscheduled_main()
                  __pyx_t_3 = __pyx_f_7questdb_7_client__oidc_raise_unscheduled_main(); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3731, __pyx_L24_error)
+3732:                     if self.handle._reset_seq != self.seen_seq:
                __pyx_t_1 = (__pyx_v_self->handle->_reset_seq != __pyx_v_self->seen_seq);
                if (__pyx_t_1) {
/* … */
                }
+3733:                         if self.delivered:
                  if (__pyx_v_self->delivered) {
/* … */
                  }
 3734:                             # The replayed batch-0 would duplicate batches
 3735:                             # already yielded.
+3736:                             self.done = True
                    __pyx_v_self->done = 1;
+3737:                             if err != NULL:
                    __pyx_t_1 = (__pyx_v_err != NULL);
                    if (__pyx_t_1) {
/* … */
                    }
+3738:                                 questdb_error_free(err)
                      questdb_error_free(__pyx_v_err);
+3739:                                 err = NULL
                      __pyx_v_err = NULL;
+3740:                             raise QuestDBError(
                    __pyx_t_10 = NULL;
                    __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3740, __pyx_L24_error)
                    __Pyx_GOTREF(__pyx_t_18);
+3741:                                 QuestDBErrorCode.FailoverWouldDuplicate,
                    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3741, __pyx_L24_error)
                    __Pyx_GOTREF(__pyx_t_11);
                    __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_FailoverWouldDuplicate); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3741, __pyx_L24_error)
                    __Pyx_GOTREF(__pyx_t_17);
                    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
                    __pyx_t_12 = 1;
                    #if CYTHON_UNPACK_METHODS
                    if (unlikely(PyMethod_Check(__pyx_t_18))) {
                      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_18);
                      assert(__pyx_t_10);
                      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_18);
                      __Pyx_INCREF(__pyx_t_10);
                      __Pyx_INCREF(__pyx__function);
                      __Pyx_DECREF_SET(__pyx_t_18, __pyx__function);
                      __pyx_t_12 = 0;
                    }
                    #endif
                    {
                      PyObject *__pyx_callargs[3] = {__pyx_t_10, __pyx_t_17, __pyx_mstate_global->__pyx_kp_u_mid_query_failover_would_duplica};
                      __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_18, __pyx_callargs+__pyx_t_12, (3-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
                      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                      if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3740, __pyx_L24_error)
                      __Pyx_GOTREF(__pyx_t_9);
                    }
                    __Pyx_Raise(__pyx_t_9, 0, 0, 0);
                    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                    __PYX_ERR(2, 3740, __pyx_L24_error)
 3742:                                 'mid-query failover would duplicate already-'
 3743:                                 'delivered batches; re-issue the query')
 3744:                         # Pre-delivery failover replays batch-0: the replayed
 3745:                         # stream restarts its dictionary at entry 0, so drop
 3746:                         # the accumulated schema and categories.
+3747:                         self.seen_seq = self.handle._reset_seq
                  __pyx_t_19 = __pyx_v_self->handle->_reset_seq;
                  __pyx_v_self->seen_seq = __pyx_t_19;
+3748:                         self.first = True
                  __pyx_v_self->first = 1;
+3749:                         self.claim = None
                  __Pyx_INCREF(Py_None);
                  __Pyx_GIVEREF(Py_None);
                  __Pyx_GOTREF(__pyx_v_self->claim);
                  __Pyx_DECREF(__pyx_v_self->claim);
                  __pyx_v_self->claim = Py_None;
+3750:                         self.has_symbol = False
                  __pyx_v_self->has_symbol = 0;
+3751:                         self.prev_dict_n = 0
                  __pyx_v_self->prev_dict_n = 0;
+3752:                         self.symbol_categories = []
                  __pyx_t_9 = PyList_New(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3752, __pyx_L24_error)
                  __Pyx_GOTREF(__pyx_t_9);
                  __Pyx_GIVEREF(__pyx_t_9);
                  __Pyx_GOTREF(__pyx_v_self->symbol_categories);
                  __Pyx_DECREF(__pyx_v_self->symbol_categories);
                  __pyx_v_self->symbol_categories = ((PyObject*)__pyx_t_9);
                  __pyx_t_9 = 0;
+3753:                         self.symbol_dtype = None
                  __Pyx_INCREF(Py_None);
                  __Pyx_GIVEREF(Py_None);
                  __Pyx_GOTREF(__pyx_v_self->symbol_dtype);
                  __Pyx_DECREF(__pyx_v_self->symbol_dtype);
                  __pyx_v_self->symbol_dtype = Py_None;
+3754:                     if batch == NULL:
                __pyx_t_1 = (__pyx_v_batch == NULL);
                if (__pyx_t_1) {
/* … */
                }
+3755:                         self.done = True
                  __pyx_v_self->done = 1;
+3756:                         if err != NULL:
                  __pyx_t_1 = (__pyx_v_err != NULL);
                  if (unlikely(__pyx_t_1)) {
/* … */
                  }
+3757:                             raise _reader_err_to_py(err)
                    __pyx_t_9 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3757, __pyx_L24_error)
                    __Pyx_GOTREF(__pyx_t_9);
                    __Pyx_Raise(__pyx_t_9, 0, 0, 0);
                    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                    __PYX_ERR(2, 3757, __pyx_L24_error)
+3758:                         _mark_reader_drained(self.handle)
                  __pyx_t_9 = ((PyObject *)__pyx_v_self->handle);
                  __Pyx_INCREF(__pyx_t_9);
                  __pyx_t_3 = __pyx_f_7questdb_7_client__mark_reader_drained(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_9)); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 3758, __pyx_L24_error)
                  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+3759:                         raise StopIteration
                  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_StopIteration))), 0, 0, 0);
                  __PYX_ERR(2, 3759, __pyx_L24_error)
+3760:                     row_count = qwp_reader_batch_row_count(batch)
                __pyx_v_row_count = qwp_reader_batch_row_count(__pyx_v_batch);
+3761:                     if self.first:
                if (__pyx_v_self->first) {
/* … */
                  goto __pyx_L38;
                }
+3762:                         self.pinned_meta = _numpy_extract_meta(batch)
                  __pyx_t_9 = __pyx_f_7questdb_7_client__numpy_extract_meta(__pyx_v_batch); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3762, __pyx_L24_error)
                  __Pyx_GOTREF(__pyx_t_9);
                  __Pyx_GIVEREF(__pyx_t_9);
                  __Pyx_GOTREF(__pyx_v_self->pinned_meta);
                  __Pyx_DECREF(__pyx_v_self->pinned_meta);
                  __pyx_v_self->pinned_meta = ((PyObject*)__pyx_t_9);
                  __pyx_t_9 = 0;
+3763:                         self.pinned_names_b = _numpy_pinned_name_bytes(
                  __pyx_t_18 = __pyx_f_7questdb_7_client__numpy_pinned_name_bytes(((PyObject*)__pyx_t_9)); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3763, __pyx_L24_error)
                  __Pyx_GOTREF(__pyx_t_18);
                  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                  __Pyx_GIVEREF(__pyx_t_18);
                  __Pyx_GOTREF(__pyx_v_self->pinned_names_b);
                  __Pyx_DECREF(__pyx_v_self->pinned_names_b);
                  __pyx_v_self->pinned_names_b = ((PyObject*)__pyx_t_18);
                  __pyx_t_18 = 0;
+3764:                             self.pinned_meta)
                  __pyx_t_9 = __pyx_v_self->pinned_meta;
                  __Pyx_INCREF(__pyx_t_9);
+3765:                         (self.col_names, self.col_kinds, self.col_scales,
                  if (!(likely(PyList_CheckExact(__pyx_t_9))||((__pyx_t_9) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_9))) __PYX_ERR(2, 3765, __pyx_L24_error)
                  if (!(likely(PyList_CheckExact(__pyx_t_17))||((__pyx_t_17) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_17))) __PYX_ERR(2, 3765, __pyx_L24_error)
                  if (!(likely(PyList_CheckExact(__pyx_t_10))||((__pyx_t_10) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_10))) __PYX_ERR(2, 3765, __pyx_L24_error)
                  if (!(likely(PyList_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_11))) __PYX_ERR(2, 3765, __pyx_L24_error)
                  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_20); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 3765, __pyx_L24_error)
                  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                  __Pyx_GIVEREF(__pyx_t_9);
                  __Pyx_GOTREF(__pyx_v_self->col_names);
                  __Pyx_DECREF(__pyx_v_self->col_names);
                  __pyx_v_self->col_names = ((PyObject*)__pyx_t_9);
                  __pyx_t_9 = 0;
                  __Pyx_GIVEREF(__pyx_t_17);
                  __Pyx_GOTREF(__pyx_v_self->col_kinds);
                  __Pyx_DECREF(__pyx_v_self->col_kinds);
                  __pyx_v_self->col_kinds = ((PyObject*)__pyx_t_17);
                  __pyx_t_17 = 0;
                  __Pyx_GIVEREF(__pyx_t_10);
                  __Pyx_GOTREF(__pyx_v_self->col_scales);
                  __Pyx_DECREF(__pyx_v_self->col_scales);
                  __pyx_v_self->col_scales = ((PyObject*)__pyx_t_10);
                  __pyx_t_10 = 0;
+3766:                          self.col_precision, self.has_symbol) = \
                  __Pyx_GIVEREF(__pyx_t_11);
                  __Pyx_GOTREF(__pyx_v_self->col_precision);
                  __Pyx_DECREF(__pyx_v_self->col_precision);
                  __pyx_v_self->col_precision = ((PyObject*)__pyx_t_11);
                  __pyx_t_11 = 0;
                  __pyx_v_self->has_symbol = __pyx_t_1;
+3767:                             self.pinned_meta
                  __pyx_t_18 = __pyx_v_self->pinned_meta;
                  __Pyx_INCREF(__pyx_t_18);
                  if (likely(__pyx_t_18 != Py_None)) {
                    PyObject* sequence = __pyx_t_18;
                    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
                    if (unlikely(size != 5)) {
                      if (size > 5) __Pyx_RaiseTooManyValuesError(5);
                      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                      __PYX_ERR(2, 3765, __pyx_L24_error)
                    }
                    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                    __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0);
                    __Pyx_INCREF(__pyx_t_9);
                    __pyx_t_17 = PyTuple_GET_ITEM(sequence, 1);
                    __Pyx_INCREF(__pyx_t_17);
                    __pyx_t_10 = PyTuple_GET_ITEM(sequence, 2);
                    __Pyx_INCREF(__pyx_t_10);
                    __pyx_t_11 = PyTuple_GET_ITEM(sequence, 3);
                    __Pyx_INCREF(__pyx_t_11);
                    __pyx_t_20 = PyTuple_GET_ITEM(sequence, 4);
                    __Pyx_INCREF(__pyx_t_20);
                    #else
                    {
                      Py_ssize_t i;
                      PyObject** temps[5] = {&__pyx_t_9,&__pyx_t_17,&__pyx_t_10,&__pyx_t_11,&__pyx_t_20};
                      for (i=0; i < 5; i++) {
                        PyObject* item = __Pyx_PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(2, 3765, __pyx_L24_error)
                        __Pyx_GOTREF(item);
                        *(temps[i]) = item;
                      }
                    }
                    #endif
                    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                  } else {
                    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 3765, __pyx_L24_error)
                  }
+3768:                         self.claim = _numpy_roundtrip_claim(
                  __pyx_t_17 = __pyx_f_7questdb_7_client__numpy_roundtrip_claim(((PyObject*)__pyx_t_18), ((PyObject*)__pyx_t_20), ((PyObject*)__pyx_t_11), ((PyObject*)__pyx_t_10)); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3768, __pyx_L24_error)
                  __Pyx_GOTREF(__pyx_t_17);
                  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
                  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                  __Pyx_GIVEREF(__pyx_t_17);
                  __Pyx_GOTREF(__pyx_v_self->claim);
                  __Pyx_DECREF(__pyx_v_self->claim);
                  __pyx_v_self->claim = __pyx_t_17;
                  __pyx_t_17 = 0;
+3769:                             self.col_names, self.col_kinds,
                  __pyx_t_18 = __pyx_v_self->col_names;
                  __Pyx_INCREF(__pyx_t_18);
                  __pyx_t_20 = __pyx_v_self->col_kinds;
                  __Pyx_INCREF(__pyx_t_20);
+3770:                             self.col_scales, self.col_precision)
                  __pyx_t_11 = __pyx_v_self->col_scales;
                  __Pyx_INCREF(__pyx_t_11);
                  __pyx_t_10 = __pyx_v_self->col_precision;
                  __Pyx_INCREF(__pyx_t_10);
+3771:                         self.first = False
                  __pyx_v_self->first = 0;
 3772:                     else:
+3773:                         _numpy_check_meta_pinned(
                /*else*/ {
/* … */
                  __pyx_t_11 = __pyx_f_7questdb_7_client__numpy_check_meta_pinned(((PyObject*)__pyx_t_17), ((PyObject*)__pyx_t_10), __pyx_v_batch); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3773, __pyx_L24_error)
                  __Pyx_GOTREF(__pyx_t_11);
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
                }
                __pyx_L38:;
+3774:                             self.pinned_meta, self.pinned_names_b, batch)
                  __pyx_t_17 = __pyx_v_self->pinned_meta;
                  __Pyx_INCREF(__pyx_t_17);
                  __pyx_t_10 = __pyx_v_self->pinned_names_b;
                  __Pyx_INCREF(__pyx_t_10);
+3775:                     n_cols = <size_t>len(self.col_names)
                __pyx_t_11 = __pyx_v_self->col_names;
                __Pyx_INCREF(__pyx_t_11);
                if (unlikely(__pyx_t_11 == Py_None)) {
                  PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
                  __PYX_ERR(2, 3775, __pyx_L24_error)
                }
                __pyx_t_21 = __Pyx_PyList_GET_SIZE(__pyx_t_11); if (unlikely(__pyx_t_21 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3775, __pyx_L24_error)
                __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
                __pyx_v_n_cols = ((size_t)__pyx_t_21);
+3776:                     if self.has_symbol:
                if (__pyx_v_self->has_symbol) {
/* … */
                }
+3777:                         _reader_check(
                  __pyx_t_19 = __pyx_f_7questdb_7_client__reader_check(qwp_reader_batch_symbol_dict(__pyx_v_batch, (&__pyx_v_sd), (&__pyx_v_err)), (&__pyx_v_err), __pyx_mstate_global->__pyx_n_u_qwp_reader_batch_symbol_dict); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(2, 3777, __pyx_L24_error)
 3778:                             qwp_reader_batch_symbol_dict(batch, &sd, &err),
 3779:                             &err, 'qwp_reader_batch_symbol_dict')
+3780:                         if sd.entry_count > self.prev_dict_n:
                  __pyx_t_1 = (__pyx_v_sd.entry_count > __pyx_v_self->prev_dict_n);
                  if (__pyx_t_1) {
/* … */
                  }
+3781:                             _symbol_categories_extend(
                    __pyx_f_7questdb_7_client__symbol_categories_extend(((PyObject*)__pyx_t_11), (&__pyx_v_sd), __pyx_v_self->prev_dict_n); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3781, __pyx_L24_error)
                    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+3782:                                 self.symbol_categories, &sd,
                    __pyx_t_11 = __pyx_v_self->symbol_categories;
                    __Pyx_INCREF(__pyx_t_11);
 3783:                                 self.prev_dict_n)
+3784:                             self.symbol_dtype = self.pd.CategoricalDtype(
                    __pyx_t_10 = __pyx_v_self->pd;
                    __Pyx_INCREF(__pyx_t_10);
/* … */
                    __Pyx_GIVEREF(__pyx_t_11);
                    __Pyx_GOTREF(__pyx_v_self->symbol_dtype);
                    __Pyx_DECREF(__pyx_v_self->symbol_dtype);
                    __pyx_v_self->symbol_dtype = __pyx_t_11;
                    __pyx_t_11 = 0;
+3785:                                 self.symbol_categories)
                    __pyx_t_12 = 0;
                    {
                      PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_self->symbol_categories};
                      __pyx_t_11 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_CategoricalDtype, __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
                      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
                      if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3784, __pyx_L24_error)
                      __Pyx_GOTREF(__pyx_t_11);
                    }
+3786:                             self.prev_dict_n = sd.entry_count
                    __pyx_t_12 = __pyx_v_sd.entry_count;
                    __pyx_v_self->prev_dict_n = __pyx_t_12;
+3787:                     batch_chunks, batch_masks = _numpy_batch_columns(
                __pyx_t_17 = __pyx_f_7questdb_7_client__numpy_batch_columns(__pyx_v_batch, ((PyObject*)__pyx_t_11), __pyx_v_n_cols, __pyx_v_row_count, __pyx_t_10); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3787, __pyx_L24_error)
                __Pyx_GOTREF(__pyx_t_17);
                __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
                __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                if (likely(__pyx_t_17 != Py_None)) {
                  PyObject* sequence = __pyx_t_17;
                  Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
                  if (unlikely(size != 2)) {
                    if (size > 2) __Pyx_RaiseTooManyValuesError(2);
                    else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                    __PYX_ERR(2, 3787, __pyx_L24_error)
                  }
                  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                  __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0);
                  __Pyx_INCREF(__pyx_t_10);
                  __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1);
                  __Pyx_INCREF(__pyx_t_11);
                  #else
                  __pyx_t_10 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 3787, __pyx_L24_error)
                  __Pyx_GOTREF(__pyx_t_10);
                  __pyx_t_11 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3787, __pyx_L24_error)
                  __Pyx_GOTREF(__pyx_t_11);
                  #endif
                  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                } else {
                  __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 3787, __pyx_L24_error)
                }
                __pyx_v_batch_chunks = __pyx_t_10;
                __pyx_t_10 = 0;
                __pyx_v_batch_masks = __pyx_t_11;
                __pyx_t_11 = 0;
              }
+3788:                         batch, self.col_kinds, n_cols, row_count, self.np)
                __pyx_t_11 = __pyx_v_self->col_kinds;
                __Pyx_INCREF(__pyx_t_11);
                __pyx_t_10 = __pyx_v_self->np;
                __Pyx_INCREF(__pyx_t_10);
 3789:                 finally:
+3790:                     self.handle._unpin()
              /*finally:*/ {
                /*normal exit:*/{
                  ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->handle->__pyx_vtab)->_unpin(__pyx_v_self->handle);
                  goto __pyx_L25;
                }
                __pyx_L24_error:;
                /*exception exit:*/{
                  __Pyx_PyThreadState_declare
                  __Pyx_PyThreadState_assign
                  __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0;
                  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
                  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
                  __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                  __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
                  __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
                  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
                   __Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_28, &__pyx_t_29);
                  if ( unlikely(__Pyx_GetException(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26) < 0)) __Pyx_ErrFetch(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26);
                  __Pyx_XGOTREF(__pyx_t_24);
                  __Pyx_XGOTREF(__pyx_t_25);
                  __Pyx_XGOTREF(__pyx_t_26);
                  __Pyx_XGOTREF(__pyx_t_27);
                  __Pyx_XGOTREF(__pyx_t_28);
                  __Pyx_XGOTREF(__pyx_t_29);
                  __pyx_t_19 = __pyx_lineno; __pyx_t_22 = __pyx_clineno; __pyx_t_23 = __pyx_filename;
                  {
                    ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->handle->__pyx_vtab)->_unpin(__pyx_v_self->handle);
                  }
                  __Pyx_XGIVEREF(__pyx_t_27);
                  __Pyx_XGIVEREF(__pyx_t_28);
                  __Pyx_XGIVEREF(__pyx_t_29);
                  __Pyx_ExceptionReset(__pyx_t_27, __pyx_t_28, __pyx_t_29);
                  __Pyx_XGIVEREF(__pyx_t_24);
                  __Pyx_XGIVEREF(__pyx_t_25);
                  __Pyx_XGIVEREF(__pyx_t_26);
                  __Pyx_ErrRestore(__pyx_t_24, __pyx_t_25, __pyx_t_26);
                  __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0; __pyx_t_29 = 0;
                  __pyx_lineno = __pyx_t_19; __pyx_clineno = __pyx_t_22; __pyx_filename = __pyx_t_23;
                  goto __pyx_L16_error;
                }
                __pyx_L25:;
              }
 3791:             # Assembly needs no cursor state, so it runs off the lock —
 3792:             # but inside the try, so a failure here ends the iterator and
 3793:             # frees the cursor like every other error path. Resuming
 3794:             # after it would step onto a consumed batch carrying a
 3795:             # half-built schema.
+3796:             col_chunks = [[c] for c in batch_chunks]
      { /* enter inner scope */
        __pyx_t_10 = PyList_New(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 3796, __pyx_L49_error)
        __Pyx_GOTREF(__pyx_t_10);
        if (unlikely(!__pyx_v_batch_chunks)) { __Pyx_RaiseUnboundLocalError("batch_chunks"); __PYX_ERR(2, 3796, __pyx_L49_error) }
        if (likely(PyList_CheckExact(__pyx_v_batch_chunks)) || PyTuple_CheckExact(__pyx_v_batch_chunks)) {
          __pyx_t_11 = __pyx_v_batch_chunks; __Pyx_INCREF(__pyx_t_11);
          __pyx_t_21 = 0;
          __pyx_t_30 = NULL;
        } else {
          __pyx_t_21 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_v_batch_chunks); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3796, __pyx_L49_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_30 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); if (unlikely(!__pyx_t_30)) __PYX_ERR(2, 3796, __pyx_L49_error)
        }
        for (;;) {
          if (likely(!__pyx_t_30)) {
            if (likely(PyList_CheckExact(__pyx_t_11))) {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_11);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 3796, __pyx_L49_error)
                #endif
                if (__pyx_t_21 >= __pyx_temp) break;
              }
              __pyx_t_17 = __Pyx_PyList_GetItemRefFast(__pyx_t_11, __pyx_t_21, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_21;
            } else {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_11);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 3796, __pyx_L49_error)
                #endif
                if (__pyx_t_21 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_17 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_21));
              #else
              __pyx_t_17 = __Pyx_PySequence_ITEM(__pyx_t_11, __pyx_t_21);
              #endif
              ++__pyx_t_21;
            }
            if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3796, __pyx_L49_error)
          } else {
            __pyx_t_17 = __pyx_t_30(__pyx_t_11);
            if (unlikely(!__pyx_t_17)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 3796, __pyx_L49_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_XDECREF_SET(__pyx_9genexpr15__pyx_v_c, __pyx_t_17);
          __pyx_t_17 = 0;
          __pyx_t_17 = PyList_New(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3796, __pyx_L49_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_INCREF(__pyx_9genexpr15__pyx_v_c);
          __Pyx_GIVEREF(__pyx_9genexpr15__pyx_v_c);
          if (__Pyx_PyList_SET_ITEM(__pyx_t_17, 0, __pyx_9genexpr15__pyx_v_c) != (0)) __PYX_ERR(2, 3796, __pyx_L49_error);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_10, (PyObject*)__pyx_t_17))) __PYX_ERR(2, 3796, __pyx_L49_error)
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_9genexpr15__pyx_v_c); __pyx_9genexpr15__pyx_v_c = 0;
        goto __pyx_L53_exit_scope;
        __pyx_L49_error:;
        __Pyx_XDECREF(__pyx_9genexpr15__pyx_v_c); __pyx_9genexpr15__pyx_v_c = 0;
        goto __pyx_L6_error;
        __pyx_L53_exit_scope:;
      } /* exit inner scope */
      __pyx_v_col_chunks = ((PyObject*)__pyx_t_10);
      __pyx_t_10 = 0;
+3797:             col_masks = [[m] for m in batch_masks]
      { /* enter inner scope */
        __pyx_t_10 = PyList_New(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 3797, __pyx_L56_error)
        __Pyx_GOTREF(__pyx_t_10);
        if (unlikely(!__pyx_v_batch_masks)) { __Pyx_RaiseUnboundLocalError("batch_masks"); __PYX_ERR(2, 3797, __pyx_L56_error) }
        if (likely(PyList_CheckExact(__pyx_v_batch_masks)) || PyTuple_CheckExact(__pyx_v_batch_masks)) {
          __pyx_t_11 = __pyx_v_batch_masks; __Pyx_INCREF(__pyx_t_11);
          __pyx_t_21 = 0;
          __pyx_t_30 = NULL;
        } else {
          __pyx_t_21 = -1; __pyx_t_11 = PyObject_GetIter(__pyx_v_batch_masks); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 3797, __pyx_L56_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_30 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_11); if (unlikely(!__pyx_t_30)) __PYX_ERR(2, 3797, __pyx_L56_error)
        }
        for (;;) {
          if (likely(!__pyx_t_30)) {
            if (likely(PyList_CheckExact(__pyx_t_11))) {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_11);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 3797, __pyx_L56_error)
                #endif
                if (__pyx_t_21 >= __pyx_temp) break;
              }
              __pyx_t_17 = __Pyx_PyList_GetItemRefFast(__pyx_t_11, __pyx_t_21, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_21;
            } else {
              {
                Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_11);
                #if !CYTHON_ASSUME_SAFE_SIZE
                if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 3797, __pyx_L56_error)
                #endif
                if (__pyx_t_21 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_17 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_21));
              #else
              __pyx_t_17 = __Pyx_PySequence_ITEM(__pyx_t_11, __pyx_t_21);
              #endif
              ++__pyx_t_21;
            }
            if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3797, __pyx_L56_error)
          } else {
            __pyx_t_17 = __pyx_t_30(__pyx_t_11);
            if (unlikely(!__pyx_t_17)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 3797, __pyx_L56_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_XDECREF_SET(__pyx_9genexpr16__pyx_v_m, __pyx_t_17);
          __pyx_t_17 = 0;
          __pyx_t_17 = PyList_New(1); if (unlikely(!__pyx_t_17)) __PYX_ERR(2, 3797, __pyx_L56_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_INCREF(__pyx_9genexpr16__pyx_v_m);
          __Pyx_GIVEREF(__pyx_9genexpr16__pyx_v_m);
          if (__Pyx_PyList_SET_ITEM(__pyx_t_17, 0, __pyx_9genexpr16__pyx_v_m) != (0)) __PYX_ERR(2, 3797, __pyx_L56_error);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_10, (PyObject*)__pyx_t_17))) __PYX_ERR(2, 3797, __pyx_L56_error)
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_9genexpr16__pyx_v_m); __pyx_9genexpr16__pyx_v_m = 0;
        goto __pyx_L60_exit_scope;
        __pyx_L56_error:;
        __Pyx_XDECREF(__pyx_9genexpr16__pyx_v_m); __pyx_9genexpr16__pyx_v_m = 0;
        goto __pyx_L6_error;
        __pyx_L60_exit_scope:;
      } /* exit inner scope */
      __pyx_v_col_masks = ((PyObject*)__pyx_t_10);
      __pyx_t_10 = 0;
+3798:             frame = _numpy_assemble_frame(
      __pyx_t_35.__pyx_n = 2;
      __pyx_t_35.symbol_dtype = __pyx_t_32;
      __pyx_t_35.claim = __pyx_t_33;
      __pyx_t_34 = __pyx_f_7questdb_7_client__numpy_assemble_frame(((PyObject*)__pyx_t_10), ((PyObject*)__pyx_t_11), ((PyObject*)__pyx_t_17), ((PyObject*)__pyx_t_20), __pyx_v_col_chunks, ((PyObject*)__pyx_t_18), __pyx_t_9, __pyx_t_31, __pyx_v_col_masks, &__pyx_t_35); if (unlikely(!__pyx_t_34)) __PYX_ERR(2, 3798, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_34);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      __pyx_v_frame = __pyx_t_34;
      __pyx_t_34 = 0;
+3799:                 self.col_names, self.col_kinds, self.col_scales,
      __pyx_t_10 = __pyx_v_self->col_names;
      __Pyx_INCREF(__pyx_t_10);
      __pyx_t_11 = __pyx_v_self->col_kinds;
      __Pyx_INCREF(__pyx_t_11);
      __pyx_t_17 = __pyx_v_self->col_scales;
      __Pyx_INCREF(__pyx_t_17);
+3800:                 self.col_precision, col_chunks, self.symbol_categories,
      __pyx_t_20 = __pyx_v_self->col_precision;
      __Pyx_INCREF(__pyx_t_20);
      __pyx_t_18 = __pyx_v_self->symbol_categories;
      __Pyx_INCREF(__pyx_t_18);
+3801:                 self.np, self.pd, col_masks, symbol_dtype=self.symbol_dtype,
      __pyx_t_9 = __pyx_v_self->np;
      __Pyx_INCREF(__pyx_t_9);
      __pyx_t_31 = __pyx_v_self->pd;
      __Pyx_INCREF(__pyx_t_31);
      __pyx_t_32 = __pyx_v_self->symbol_dtype;
      __Pyx_INCREF(__pyx_t_32);
+3802:                 claim=self.claim)
      __pyx_t_33 = __pyx_v_self->claim;
      __Pyx_INCREF(__pyx_t_33);
+3803:         except:
    /*except:*/ {
      __Pyx_AddTraceback("questdb._client._NumpyBatchIter.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_34, &__pyx_t_33, &__pyx_t_32) < 0) __PYX_ERR(2, 3803, __pyx_L8_except_error)
      __Pyx_XGOTREF(__pyx_t_34);
      __Pyx_XGOTREF(__pyx_t_33);
      __Pyx_XGOTREF(__pyx_t_32);
+3804:             self.done = True
      __pyx_v_self->done = 1;
+3805:             self.handle._free()
      ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_self->handle->__pyx_vtab)->_free(__pyx_v_self->handle);
+3806:             raise
      __Pyx_GIVEREF(__pyx_t_34);
      __Pyx_GIVEREF(__pyx_t_33);
      __Pyx_XGIVEREF(__pyx_t_32);
      __Pyx_ErrRestoreWithState(__pyx_t_34, __pyx_t_33, __pyx_t_32);
      __pyx_t_34 = 0;  __pyx_t_33 = 0;  __pyx_t_32 = 0; 
      __PYX_ERR(2, 3806, __pyx_L8_except_error)
    }
+3807:         self.delivered = True
  __pyx_v_self->delivered = 1;
+3808:         return frame
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_frame);
  __pyx_r = __pyx_v_frame;
  goto __pyx_L0;
 3809: 
+3810:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_7questdb_7_client_15_NumpyBatchIter_7__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_7questdb_7_client_15_NumpyBatchIter_7__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_7questdb_7_client_15_NumpyBatchIter_6__dealloc__(((struct __pyx_obj_7questdb_7_client__NumpyBatchIter *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_7questdb_7_client_15_NumpyBatchIter_6__dealloc__(struct __pyx_obj_7questdb_7_client__NumpyBatchIter *__pyx_v_self) {
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
+3811:         if not self.done and self.handle is not None:
  __pyx_t_2 = (!__pyx_v_self->done);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (((PyObject *)__pyx_v_self->handle) != Py_None);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+3812:             _reclaim_cursor_no_wait(self.handle)
    __pyx_t_3 = ((PyObject *)__pyx_v_self->handle);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_f_7questdb_7_client__reclaim_cursor_no_wait(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_3));
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 3813: 
 3814: 
+3815: def _debug_new_cursor_finalizer_owner(
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_77_debug_new_cursor_finalizer_owner(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_76_debug_new_cursor_finalizer_owner, "Construct a real cursor owner for non-blocking finalizer tests.");
static PyMethodDef __pyx_mdef_7questdb_7_client_77_debug_new_cursor_finalizer_owner = {"_debug_new_cursor_finalizer_owner", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_77_debug_new_cursor_finalizer_owner, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_76_debug_new_cursor_finalizer_owner};
static PyObject *__pyx_pw_7questdb_7_client_77_debug_new_cursor_finalizer_owner(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_kind = 0;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_new_cursor_finalizer_owner (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_kind,&__pyx_mstate_global->__pyx_n_u_handle,0};
  PyObject* values[2] = {0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 3815, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 3815, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3815, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_new_cursor_finalizer_owner", 0) < (0)) __PYX_ERR(2, 3815, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_new_cursor_finalizer_owner", 1, 2, 2, i); __PYX_ERR(2, 3815, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3815, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 3815, __pyx_L3_error)
    }
    __pyx_v_kind = ((PyObject*)values[0]);
    __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_new_cursor_finalizer_owner", 1, 2, 2, __pyx_nargs); __PYX_ERR(2, 3815, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_new_cursor_finalizer_owner", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_kind), (&PyUnicode_Type), 1, "kind", 1))) __PYX_ERR(2, 3816, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_handle), __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle, 1, "handle", 0))) __PYX_ERR(2, 3816, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_76_debug_new_cursor_finalizer_owner(__pyx_self, __pyx_v_kind, __pyx_v_handle);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_76_debug_new_cursor_finalizer_owner(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_kind, struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle) {
  PyObject *__pyx_v_owner = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._debug_new_cursor_finalizer_owner", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_owner);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_77_debug_new_cursor_finalizer_owner, 0, __pyx_mstate_global->__pyx_n_u_debug_new_cursor_finalizer_owne, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[91])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_new_cursor_finalizer_owne, __pyx_t_18) < (0)) __PYX_ERR(2, 3815, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 3816:         str kind, _CursorHandle handle):
 3817:     """Construct a real cursor owner for non-blocking finalizer tests."""
+3818:     if kind == 'numpy':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_numpy, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 3818, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3819:         return _NumpyBatchIter(handle)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, ((PyObject *)__pyx_v_handle)};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__NumpyBatchIter, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3819, __pyx_L1_error)
      __Pyx_GOTREF((PyObject *)__pyx_t_2);
    }
    __pyx_r = ((PyObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;
+3820:     if kind == 'generator':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_generator, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 3820, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3821:         owner = _record_batch_generator(None, handle, None, False, 0)
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_record_batch_generator); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3821, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_4 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[6] = {__pyx_t_3, Py_None, ((PyObject *)__pyx_v_handle), Py_None, Py_False, __pyx_mstate_global->__pyx_int_0};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_4, (6-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3821, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_v_owner = __pyx_t_2;
    __pyx_t_2 = 0;
+3822:         next(owner)  # Enter its try/finally and park at the first yielded batch.
    __pyx_t_2 = __Pyx_PyIter_Next(__pyx_v_owner); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3822, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3823:         return owner
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_owner);
    __pyx_r = __pyx_v_owner;
    goto __pyx_L0;
+3824:     if kind == 'capsule':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_capsule, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 3824, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3825:         return _query_stream_capsule(_new_query_stream_producer(handle))
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = ((PyObject *)__pyx_f_7questdb_7_client__new_query_stream_producer(__pyx_v_handle)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3825, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __pyx_f_7questdb_7_client__query_stream_capsule(((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_t_2)); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3825, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;
+3826:     if kind == 'query_result':
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_query_result, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 3826, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3827:         return QueryResult(handle)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QueryResult); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3827, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_2);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
      __pyx_t_4 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_handle)};
      __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3827, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;
+3828:     raise ValueError(f'unknown cursor finalizer owner {kind!r}')
  __pyx_t_3 = NULL;
  __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_kind), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_unknown_cursor_finalizer_owner, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3828, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __Pyx_Raise(__pyx_t_5, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __PYX_ERR(2, 3828, __pyx_L1_error)
 3829: 
 3830: 
+3831: cdef bytes _ARROW_MD_COLUMN_TYPE = b'questdb.column_type'
  __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_b_questdb_column_type);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__ARROW_MD_COLUMN_TYPE);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__ARROW_MD_COLUMN_TYPE, __pyx_mstate_global->__pyx_kp_b_questdb_column_type);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_kp_b_questdb_column_type);
+3832: cdef bytes _ARROW_MD_GEOHASH_BITS = b'questdb.geohash_bits'
  __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_b_questdb_geohash_bits);
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__ARROW_MD_GEOHASH_BITS);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__ARROW_MD_GEOHASH_BITS, __pyx_mstate_global->__pyx_kp_b_questdb_geohash_bits);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_kp_b_questdb_geohash_bits);
 3833: 
 3834: 
 3835: # The Rust egress spells a few kinds differently on the Arrow field than
 3836: # the QWP reader reports them, so map them onto the `_KIND_NAMES`
 3837: # vocabulary: `df.attrs['questdb']` then means the same thing whichever
 3838: # backend built the frame.
 3839: cdef dict _ARROW_KIND_ALIASES = {
+3840:     'timestamp_nanos': 'timestamp_ns',
  __pyx_t_18 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_timestamp_nanos, __pyx_mstate_global->__pyx_n_u_timestamp_ns) < (0)) __PYX_ERR(2, 3840, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_decimal64, __pyx_mstate_global->__pyx_n_u_decimal) < (0)) __PYX_ERR(2, 3840, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_decimal128, __pyx_mstate_global->__pyx_n_u_decimal) < (0)) __PYX_ERR(2, 3840, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_decimal256, __pyx_mstate_global->__pyx_n_u_decimal) < (0)) __PYX_ERR(2, 3840, __pyx_L1_error)
  __Pyx_XGOTREF(__pyx_v_7questdb_7_client__ARROW_KIND_ALIASES);
  __Pyx_DECREF_SET(__pyx_v_7questdb_7_client__ARROW_KIND_ALIASES, ((PyObject*)__pyx_t_18));
  __Pyx_GIVEREF(__pyx_t_18);
  __pyx_t_18 = 0;
 3841:     'decimal64': 'decimal',
 3842:     'decimal128': 'decimal',
 3843:     'decimal256': 'decimal',
 3844: }
 3845: 
 3846: 
+3847: cdef object _arrow_field_roundtrip_meta(object field):
static PyObject *__pyx_f_7questdb_7_client__arrow_field_roundtrip_meta(PyObject *__pyx_v_field) {
  PyObject *__pyx_v_md = 0;
  PyObject *__pyx_v_raw = 0;
  PyObject *__pyx_v_bits = 0;
  PyObject *__pyx_v_scale = 0;
  PyObject *__pyx_v_entry = 0;
  PyObject *__pyx_v_kind = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._arrow_field_roundtrip_meta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_md);
  __Pyx_XDECREF(__pyx_v_raw);
  __Pyx_XDECREF(__pyx_v_bits);
  __Pyx_XDECREF(__pyx_v_scale);
  __Pyx_XDECREF(__pyx_v_entry);
  __Pyx_XDECREF(__pyx_v_kind);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3848:     """One `df.attrs['questdb']['columns']` entry built from an Arrow
 3849:     field's QuestDB metadata, or None where the field claims no kind."""
+3850:     cdef object md = field.metadata
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_metadata); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_md = __pyx_t_1;
  __pyx_t_1 = 0;
 3851:     cdef object raw
 3852:     cdef object bits
 3853:     cdef object scale
 3854:     cdef dict entry
+3855:     if not md:
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_md); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 3855, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {
/* … */
  }
+3856:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+3857:     raw = md.get(_ARROW_MD_COLUMN_TYPE)
  __pyx_t_4 = __pyx_v_md;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_7questdb_7_client__ARROW_MD_COLUMN_TYPE};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3857, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_raw = __pyx_t_1;
  __pyx_t_1 = 0;
+3858:     if raw is None:
  __pyx_t_3 = (__pyx_v_raw == Py_None);
  if (__pyx_t_3) {
/* … */
  }
+3859:         return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+3860:     kind = raw.decode('utf-8', 'replace')
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw, __pyx_mstate_global->__pyx_n_u_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[2], NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_kind = __pyx_t_4;
  __pyx_t_4 = 0;
+3861:     kind = _ARROW_KIND_ALIASES.get(kind, kind)
  if (unlikely(__pyx_v_7questdb_7_client__ARROW_KIND_ALIASES == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(2, 3861, __pyx_L1_error)
  }
  __pyx_t_4 = __Pyx_PyDict_GetItemDefault(__pyx_v_7questdb_7_client__ARROW_KIND_ALIASES, __pyx_v_kind, __pyx_v_kind); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3861, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF_SET(__pyx_v_kind, __pyx_t_4);
  __pyx_t_4 = 0;
+3862:     entry = {'kind': kind}
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_kind, __pyx_v_kind) < (0)) __PYX_ERR(2, 3862, __pyx_L1_error)
  __pyx_v_entry = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
+3863:     if kind == 'geohash':
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_geohash_2, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 3863, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
    goto __pyx_L5;
  }
+3864:         bits = md.get(_ARROW_MD_GEOHASH_BITS)
    __pyx_t_1 = __pyx_v_md;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_7questdb_7_client__ARROW_MD_GEOHASH_BITS};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3864, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_v_bits = __pyx_t_4;
    __pyx_t_4 = 0;
+3865:         if bits is not None:
    __pyx_t_3 = (__pyx_v_bits != Py_None);
    if (__pyx_t_3) {
/* … */
    }
+3866:             try:
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L12_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L12_try_end:;
      }
+3867:                 entry['precision_bits'] = int(bits)
          __pyx_t_4 = __Pyx_PyNumber_Int(__pyx_v_bits); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3867, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (unlikely((PyDict_SetItem(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_precision_bits, __pyx_t_4) < 0))) __PYX_ERR(2, 3867, __pyx_L7_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+3868:             except ValueError:
        __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ValueError))));
        if (__pyx_t_9) {
          __Pyx_ErrRestore(0,0,0);
          goto __pyx_L8_exception_handled;
        }
        goto __pyx_L9_except_error;
 3869:                 pass
+3870:     elif kind == 'decimal':
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_kind, __pyx_mstate_global->__pyx_n_u_decimal, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 3870, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
  }
  __pyx_L5:;
+3871:         scale = getattr(field.type, 'scale', None)
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_field, __pyx_mstate_global->__pyx_n_u_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3871, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __Pyx_GetAttr3(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_scale, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3871, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_scale = __pyx_t_1;
    __pyx_t_1 = 0;
+3872:         if scale is not None:
    __pyx_t_3 = (__pyx_v_scale != Py_None);
    if (__pyx_t_3) {
/* … */
    }
+3873:             entry['scale'] = scale
      if (unlikely((PyDict_SetItem(__pyx_v_entry, __pyx_mstate_global->__pyx_n_u_scale, __pyx_v_scale) < 0))) __PYX_ERR(2, 3873, __pyx_L1_error)
+3874:     return entry
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_entry);
  __pyx_r = __pyx_v_entry;
  goto __pyx_L0;
 3875: 
 3876: 
+3877: cdef dict _arrow_roundtrip_columns_meta(object schema):
static PyObject *__pyx_f_7questdb_7_client__arrow_roundtrip_columns_meta(PyObject *__pyx_v_schema) {
  PyObject *__pyx_v_columns_meta = 0;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_entry = 0;
  PyObject *__pyx_v_names = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client._arrow_roundtrip_columns_meta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_columns_meta);
  __Pyx_XDECREF(__pyx_v_entry);
  __Pyx_XDECREF(__pyx_v_names);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3878:     """The `columns` map of `df.attrs['questdb']`, read off the Arrow
 3879:     schema's QuestDB field metadata."""
+3880:     cdef dict columns_meta = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3880, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_columns_meta = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 3881:     cdef Py_ssize_t i
 3882:     cdef object entry
 3883:     # `schema.names` rebuilds the list and decodes every field name on
 3884:     # each read, so it is read once. Every column of a QuestDB result
 3885:     # carries type metadata, which made the old per-column read
 3886:     # quadratic in the column count and `iter_pandas` paid it per batch.
+3887:     cdef list names = schema.names
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_schema, __pyx_mstate_global->__pyx_n_u_names); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3887, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(2, 3887, __pyx_L1_error)
  __pyx_v_names = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3888:     for i in range(len(names)):
  if (unlikely(__pyx_v_names == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 3888, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyList_GET_SIZE(__pyx_v_names); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(2, 3888, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i = __pyx_t_4;
+3889:         entry = _arrow_field_roundtrip_meta(schema.field(i))
    __pyx_t_5 = __pyx_v_schema;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = PyLong_FromSsize_t(__pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_field, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3889, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_6 = __pyx_f_7questdb_7_client__arrow_field_roundtrip_meta(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_6);
    __pyx_t_6 = 0;
+3890:         if entry is not None:
    __pyx_t_8 = (__pyx_v_entry != Py_None);
    if (__pyx_t_8) {
/* … */
    }
  }
+3891:             columns_meta[names[i]] = entry
      if (unlikely(__pyx_v_names == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(2, 3891, __pyx_L1_error)
      }
      __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_names, __pyx_v_i, Py_ssize_t, 1, PyLong_FromSsize_t, 1, 1, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3891, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely((PyDict_SetItem(__pyx_v_columns_meta, __pyx_t_6, __pyx_v_entry) < 0))) __PYX_ERR(2, 3891, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+3892:     return columns_meta
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_columns_meta);
  __pyx_r = __pyx_v_columns_meta;
  goto __pyx_L0;
 3893: 
 3894: 
+3895: cdef object _arrow_roundtrip_claim(object schema):
static PyObject *__pyx_f_7questdb_7_client__arrow_roundtrip_claim(PyObject *__pyx_v_schema) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client._arrow_roundtrip_claim", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3896:     """The ``df.attrs['questdb']`` claim for an Arrow schema.
 3897: 
 3898:     One schema covers every batch of a stream, and the claim declines to
 3899:     be copied and cannot be edited, so a streaming read builds it once
 3900:     and hands the same claim to every batch it yields.
 3901:     """
+3902:     return _RoundtripClaim(
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_RoundtripClaim); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
+3903:         {'version': _ROUNDTRIP_META_VERSION,
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_7questdb_7_client__ROUNDTRIP_META_VERSION); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_version, __pyx_t_5) < (0)) __PYX_ERR(2, 3903, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+3904:          'columns': _arrow_roundtrip_columns_meta(schema)})
  __pyx_t_5 = __pyx_f_7questdb_7_client__arrow_roundtrip_columns_meta(__pyx_v_schema); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_columns, __pyx_t_5) < (0)) __PYX_ERR(2, 3903, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3905: 
 3906: 
+3907: cdef object _attach_arrow_roundtrip_attrs(object frame, object schema):
static PyObject *__pyx_f_7questdb_7_client__attach_arrow_roundtrip_attrs(PyObject *__pyx_v_frame, PyObject *__pyx_v_schema) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client._attach_arrow_roundtrip_attrs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3908:     """Carry the per-column QuestDB kinds into `df.attrs['questdb']`,
 3909:     matching what the native numpy path attaches.
 3910: 
 3911:     The kind claim rides on the Arrow *field*, while a pandas dtype holds
 3912:     only the *type*, so `Table.to_pandas` drops it. `attrs` is the
 3913:     pandas-level carrier `QuestDB.dataframe()` reads back to restore
 3914:     IPV4 / CHAR / GEOHASH / UUID / LONG256 columns, which are otherwise
 3915:     indistinguishable from their storage types on the way back in.
 3916:     """
+3917:     frame.attrs['questdb'] = _arrow_roundtrip_claim(schema)
  __pyx_t_1 = __pyx_f_7questdb_7_client__arrow_roundtrip_claim(__pyx_v_schema); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely((PyObject_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_questdb, __pyx_t_1) < 0))) __PYX_ERR(2, 3917, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3918:     return frame
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_frame);
  __pyx_r = __pyx_v_frame;
  goto __pyx_L0;
 3919: 
 3920: 
+3921: def _debug_arrow_roundtrip_columns_meta(schema):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_79_debug_arrow_roundtrip_columns_meta(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_78_debug_arrow_roundtrip_columns_meta, "Internal: the ``df.attrs['questdb']['columns']`` map that the\n    pyarrow-backed ``to_pandas`` / ``iter_pandas`` attach for a\n    ``pyarrow.Schema``. Lets the mapping be tested without a server.\n\n    Not part of the public API.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_79_debug_arrow_roundtrip_columns_meta = {"_debug_arrow_roundtrip_columns_meta", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_79_debug_arrow_roundtrip_columns_meta, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_78_debug_arrow_roundtrip_columns_meta};
static PyObject *__pyx_pw_7questdb_7_client_79_debug_arrow_roundtrip_columns_meta(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_schema = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_arrow_roundtrip_columns_meta (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_schema,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 3921, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3921, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_arrow_roundtrip_columns_meta", 0) < (0)) __PYX_ERR(2, 3921, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_arrow_roundtrip_columns_meta", 1, 1, 1, i); __PYX_ERR(2, 3921, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3921, __pyx_L3_error)
    }
    __pyx_v_schema = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_arrow_roundtrip_columns_meta", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3921, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_arrow_roundtrip_columns_meta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_78_debug_arrow_roundtrip_columns_meta(__pyx_self, __pyx_v_schema);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_78_debug_arrow_roundtrip_columns_meta(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_schema) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client._debug_arrow_roundtrip_columns_meta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_79_debug_arrow_roundtrip_columns_meta, 0, __pyx_mstate_global->__pyx_n_u_debug_arrow_roundtrip_columns_m, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[92])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_arrow_roundtrip_columns_m, __pyx_t_18) < (0)) __PYX_ERR(2, 3921, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 3922:     """Internal: the ``df.attrs['questdb']['columns']`` map that the
 3923:     pyarrow-backed ``to_pandas`` / ``iter_pandas`` attach for a
 3924:     ``pyarrow.Schema``. Lets the mapping be tested without a server.
 3925: 
 3926:     Not part of the public API.
 3927:     """
+3928:     return _arrow_roundtrip_columns_meta(schema)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7questdb_7_client__arrow_roundtrip_columns_meta(__pyx_v_schema); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3928, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3929: 
 3930: 
+3931: cdef object _resolve_arrow_to_pandas_kwargs(dtype_backend, types_mapper):
static PyObject *__pyx_f_7questdb_7_client__resolve_arrow_to_pandas_kwargs(PyObject *__pyx_v_dtype_backend, PyObject *__pyx_v_types_mapper) {
  PyObject *__pyx_v_kwargs = NULL;
  PyObject *__pyx_v_pd = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client._resolve_arrow_to_pandas_kwargs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XDECREF(__pyx_v_pd);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3932:     kwargs = {}
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_kwargs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+3933:     if types_mapper is not None:
  __pyx_t_2 = (__pyx_v_types_mapper != Py_None);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3934:         kwargs['types_mapper'] = types_mapper
    if (unlikely((PyDict_SetItem(__pyx_v_kwargs, __pyx_mstate_global->__pyx_n_u_types_mapper, __pyx_v_types_mapper) < 0))) __PYX_ERR(2, 3934, __pyx_L1_error)
+3935:     elif dtype_backend == 'pyarrow':
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_dtype_backend, __pyx_mstate_global->__pyx_n_u_pyarrow, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 3935, __pyx_L1_error)
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3936:         import pandas as pd
    __pyx_t_3 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pandas_2, 0, 0, NULL, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 3936, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_3;
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_pd = __pyx_t_1;
    __pyx_t_1 = 0;
+3937:         if not hasattr(pd, 'ArrowDtype'):
    __pyx_t_2 = __Pyx_HasAttr(__pyx_v_pd, __pyx_mstate_global->__pyx_n_u_ArrowDtype); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(2, 3937, __pyx_L1_error)
    __pyx_t_4 = (!__pyx_t_2);
    if (unlikely(__pyx_t_4)) {
/* … */
    }
+3938:             raise ImportError(_pandas_too_old_message(
      __pyx_t_5 = NULL;
/* … */
      __pyx_t_6 = __pyx_f_7questdb_7_client__pandas_too_old_message(__pyx_v_pd, __pyx_mstate_global->__pyx_kp_u_dtype_backend_pyarrow); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3938, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ImportError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(2, 3938, __pyx_L1_error)
 3939:                 pd, "`dtype_backend='pyarrow'`"))
+3940:         kwargs['types_mapper'] = pd.ArrowDtype
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_pd, __pyx_mstate_global->__pyx_n_u_ArrowDtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3940, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely((PyDict_SetItem(__pyx_v_kwargs, __pyx_mstate_global->__pyx_n_u_types_mapper, __pyx_t_1) < 0))) __PYX_ERR(2, 3940, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3941:     elif dtype_backend == 'numpy_nullable':
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_v_dtype_backend, __pyx_mstate_global->__pyx_n_u_numpy_nullable, Py_EQ)); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(2, 3941, __pyx_L1_error)
  if (__pyx_t_4) {
/* … */
    goto __pyx_L3;
  }
+3942:         kwargs['types_mapper'] = _numpy_nullable_mapping()
    __pyx_t_1 = __pyx_f_7questdb_7_client__numpy_nullable_mapping(); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3942, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely((PyDict_SetItem(__pyx_v_kwargs, __pyx_mstate_global->__pyx_n_u_types_mapper, __pyx_t_1) < 0))) __PYX_ERR(2, 3942, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+3943:     elif dtype_backend is not None:
  __pyx_t_4 = (__pyx_v_dtype_backend != Py_None);
  if (unlikely(__pyx_t_4)) {
/* … */
  }
  __pyx_L3:;
+3944:         raise ValueError(
    __pyx_t_6 = NULL;
+3945:             f'dtype_backend={dtype_backend!r} is invalid, '
    __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_dtype_backend), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 3945, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_dtype_backend;
    __pyx_t_8[1] = __pyx_t_5;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_is_invalid_only_pyarrow_and_num;
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, 14 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 60, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5));
    if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 3945, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_9};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3944, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 3944, __pyx_L1_error)
 3946:             'only "pyarrow" and "numpy_nullable" are allowed')
+3947:     return kwargs
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_kwargs);
  __pyx_r = __pyx_v_kwargs;
  goto __pyx_L0;
 3948: 
 3949: 
+3950: def _debug_egress_pool_stats(client):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_81_debug_egress_pool_stats(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_80_debug_egress_pool_stats, "Return ``(in_use, idle)`` from the client's reader pool.\n\n    The Rust pool doesn't track \"opened\" / \"reused\" as counters \342\200\224 they\n    fall out of ``in_use + idle`` plus the lazy-init pattern (first\n    borrow opens a connection; the idle list grows on returns; reuse\n    is implicit). Tests assert reuse by checking that ``idle == 1``\n    after sequential queries that each borrowed and returned. Returns\n    ``None`` if the QuestDB handle is closed.\n\n    Not part of the public API.\n    ");
static PyMethodDef __pyx_mdef_7questdb_7_client_81_debug_egress_pool_stats = {"_debug_egress_pool_stats", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_81_debug_egress_pool_stats, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_80_debug_egress_pool_stats};
static PyObject *__pyx_pw_7questdb_7_client_81_debug_egress_pool_stats(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_client = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_debug_egress_pool_stats (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_client,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 3950, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3950, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_debug_egress_pool_stats", 0) < (0)) __PYX_ERR(2, 3950, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_debug_egress_pool_stats", 1, 1, 1, i); __PYX_ERR(2, 3950, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 3950, __pyx_L3_error)
    }
    __pyx_v_client = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_debug_egress_pool_stats", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3950, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client._debug_egress_pool_stats", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_80_debug_egress_pool_stats(__pyx_self, __pyx_v_client);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_80_debug_egress_pool_stats(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_client) {
  struct __pyx_obj_7questdb_7_client_QuestDB *__pyx_v_c = 0;
  struct questdb_db *__pyx_v_db;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client._debug_egress_pool_stats", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_c);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_18 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_81_debug_egress_pool_stats, 0, __pyx_mstate_global->__pyx_n_u_debug_egress_pool_stats, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[93])); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_18);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_debug_egress_pool_stats, __pyx_t_18) < (0)) __PYX_ERR(2, 3950, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 3951:     """Return ``(in_use, idle)`` from the client's reader pool.
 3952: 
 3953:     The Rust pool doesn't track "opened" / "reused" as counters — they
 3954:     fall out of ``in_use + idle`` plus the lazy-init pattern (first
 3955:     borrow opens a connection; the idle list grows on returns; reuse
 3956:     is implicit). Tests assert reuse by checking that ``idle == 1``
 3957:     after sequential queries that each borrowed and returned. Returns
 3958:     ``None`` if the QuestDB handle is closed.
 3959: 
 3960:     Not part of the public API.
 3961:     """
+3962:     cdef QuestDB c = client
  __pyx_t_1 = __pyx_v_client;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client_QuestDB))))) __PYX_ERR(2, 3962, __pyx_L1_error)
  __pyx_v_c = ((struct __pyx_obj_7questdb_7_client_QuestDB *)__pyx_t_1);
  __pyx_t_1 = 0;
 3963:     cdef questdb_db* db
+3964:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
    __pyx_L8_try_end:;
  }
+3965:         db = c._begin_db_use('_debug_egress_pool_stats')
      __pyx_t_5 = ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_c->__pyx_vtab)->_begin_db_use(__pyx_v_c, __pyx_mstate_global->__pyx_n_u_debug_egress_pool_stats, NULL); if (unlikely(__pyx_t_5 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(2, 3965, __pyx_L3_error)
      __pyx_v_db = __pyx_t_5;
+3966:     except QuestDBError:
    __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7);
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 3966, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_8);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_ErrRestore(__pyx_t_1, __pyx_t_6, __pyx_t_7);
    __pyx_t_1 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0;
    if (__pyx_t_9) {
      __Pyx_ErrRestore(0,0,0);
+3967:         return None
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;
+3968:     try:
  /*try:*/ {
+3969:         return (
    __Pyx_XDECREF(__pyx_r);
+3970:             questdb_db_dbg_reader_in_use_count(db),
    __pyx_t_7 = __Pyx_PyLong_FromSize_t(questdb_db_dbg_reader_in_use_count(__pyx_v_db)); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 3970, __pyx_L12_error)
    __Pyx_GOTREF(__pyx_t_7);
/* … */
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3970, __pyx_L12_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_7);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_7) != (0)) __PYX_ERR(2, 3970, __pyx_L12_error);
    __Pyx_GIVEREF(__pyx_t_6);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6) != (0)) __PYX_ERR(2, 3970, __pyx_L12_error);
    __pyx_t_7 = 0;
    __pyx_t_6 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L11_return;
  }
+3971:             questdb_db_dbg_reader_free_count(db))
    __pyx_t_6 = __Pyx_PyLong_FromSize_t(questdb_db_dbg_reader_free_count(__pyx_v_db)); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 3971, __pyx_L12_error)
    __Pyx_GOTREF(__pyx_t_6);
 3972:     finally:
+3973:         c._end_db_use()
  /*finally:*/ {
    __pyx_L12_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if ( unlikely(__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2) < 0)) __Pyx_ErrFetch(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
      {
        ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_c->__pyx_vtab)->_end_db_use(__pyx_v_c, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3973, __pyx_L15_error)
      }
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ErrRestore(__pyx_t_4, __pyx_t_3, __pyx_t_2);
      __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
      goto __pyx_L1_error;
      __pyx_L15_error:;
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L11_return: {
      __pyx_t_14 = __pyx_r;
      __pyx_r = 0;
      ((struct __pyx_vtabstruct_7questdb_7_client_QuestDB *)__pyx_v_c->__pyx_vtab)->_end_db_use(__pyx_v_c, NULL); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3973, __pyx_L1_error)
      __pyx_r = __pyx_t_14;
      __pyx_t_14 = 0;
      goto __pyx_L0;
    }
  }
 3974: 
 3975: 
+3976: cdef bint _cursor_handle_is_live(_CursorHandle h):
static int __pyx_f_7questdb_7_client__cursor_handle_is_live(struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_h) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client._cursor_handle_is_live", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}
+3977:     return h is not None and h._is_live()
  __pyx_t_2 = (((PyObject *)__pyx_v_h) != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_h->__pyx_vtab)->_is_live(__pyx_v_h); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3977, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 3978: 
 3979: 
+3980: ExecDone = collections.namedtuple(
  __pyx_t_17 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_collections); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 3980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_namedtuple); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 3980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+3981:     'ExecDone', ['op_type', 'rows_affected'], module=__name__)
  __pyx_t_16 = __Pyx_PyList_Pack(2, __pyx_mstate_global->__pyx_n_u_op_type, __pyx_mstate_global->__pyx_n_u_rows_affected); if (unlikely(!__pyx_t_16)) __PYX_ERR(2, 3981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_name_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 3981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_17, __pyx_mstate_global->__pyx_n_u_ExecDone, __pyx_t_16};
    __pyx_t_20 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 3980, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_module_2, __pyx_t_4, __pyx_t_20, __pyx_callargs+3, 0) < (0)) __PYX_ERR(2, 3980, __pyx_L1_error)
    __pyx_t_18 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_19, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_20);
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
    if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3980, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ExecDone, __pyx_t_18) < (0)) __PYX_ERR(2, 3980, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+3982: ExecDone.__doc__ = """A non-SELECT statement's terminal ``EXEC_DONE`` report.
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_ExecDone); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (__Pyx_PyObject_SetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_doc, __pyx_mstate_global->__pyx_kp_u_A_non_SELECT_statement_s_termina) < (0)) __PYX_ERR(2, 3982, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 3983: 
 3984: Returned by :meth:`QuestDB.execute` / :meth:`PooledReader.execute` and
 3985: carried on :attr:`QueryResult.exec_done`; both give ``None`` instead for a
 3986: statement that streamed a result set. A named tuple:
 3987: ``done = db.execute(sql)`` reads as ``done.rows_affected``.
 3988: """
+3989: ExecDone.op_type.__doc__ = (
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_ExecDone); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_op_type); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 3989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_doc, __pyx_mstate_global->__pyx_kp_u_The_server_s_QWP_operation_type) < (0)) __PYX_ERR(2, 3989, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 3990:     "The server's QWP operation-type byte, carried through as an opaque "
 3991:     "``int``; its values are the server's, not part of this client's API.")
+3992: ExecDone.rows_affected.__doc__ = (
  __Pyx_GetModuleGlobalName(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_ExecDone); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 3992, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_rows_affected); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 3992, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_doc, __pyx_mstate_global->__pyx_kp_u_The_number_of_rows_an_INSERT_or) < (0)) __PYX_ERR(2, 3992, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 3993:     'The number of rows an ``INSERT`` or ``UPDATE`` touched; ``0`` for a '
 3994:     'statement that carries no count, such as one executed at parse time '
 3995:     '(``TRUNCATE``, ``RENAME TABLE``, ``SET``, ...).')
 3996: 
 3997: 
+3998: cdef bint _called_by_old_polars():
static int __pyx_f_7questdb_7_client__called_by_old_polars(void) {
  PyObject *__pyx_v_pl = 0;
  PyObject *__pyx_v_major = NULL;
  PyObject *__pyx_v_minor = NULL;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("questdb._client._called_by_old_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pl);
  __Pyx_XDECREF(__pyx_v_major);
  __Pyx_XDECREF(__pyx_v_minor);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3999:     # polars before 1.32 decodes every batch of a stream with the first
 4000:     # batch's dictionary, so SYMBOL values come out wrong without an error.
 4001:     # polars calls `__arrow_c_stream__` from its own Python code
 4002:     # (`pycapsule_to_frame`, `Series.__init__`), and a Cython function pushes
 4003:     # no frame, so frame 0 is the caller. duckdb 1.5 calls it from a worker
 4004:     # thread with no Python frame, where `sys._getframe` raises ValueError.
+4005:     cdef object pl = sys.modules.get('polars')
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4005, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4005, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_n_u_polars};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4005, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_pl = __pyx_t_1;
  __pyx_t_1 = 0;
+4006:     if pl is None:
  __pyx_t_6 = (__pyx_v_pl == Py_None);
  if (__pyx_t_6) {
/* … */
  }
+4007:         return False
    __pyx_r = 0;
    goto __pyx_L0;
+4008:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L8_try_return:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L0;
    __pyx_L7_except_return:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L0;
  }
+4009:         major, minor = pl.__version__.split('.')[:2]
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_pl, __pyx_mstate_global->__pyx_n_u_version_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4009, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __pyx_t_2;
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u__2};
        __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_split, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4009, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_t_1, 0, 2, NULL, NULL, &__pyx_mstate_global->__pyx_slice[2], 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4009, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
        PyObject* sequence = __pyx_t_2;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(2, 4009, __pyx_L4_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
          __Pyx_INCREF(__pyx_t_1);
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
          __Pyx_INCREF(__pyx_t_4);
        } else {
          __pyx_t_1 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
          if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4009, __pyx_L4_error)
          __Pyx_XGOTREF(__pyx_t_1);
          __pyx_t_4 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
          if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4009, __pyx_L4_error)
          __Pyx_XGOTREF(__pyx_t_4);
        }
        #else
        __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4009, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4009, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4009, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_10 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
        index = 0; __pyx_t_1 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L10_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_1);
        index = 1; __pyx_t_4 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_4)) goto __pyx_L10_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_3), 2) < (0)) __PYX_ERR(2, 4009, __pyx_L4_error)
        __pyx_t_10 = NULL;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L11_unpacking_done;
        __pyx_L10_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_10 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(2, 4009, __pyx_L4_error)
        __pyx_L11_unpacking_done:;
      }
      __pyx_v_major = __pyx_t_1;
      __pyx_t_1 = 0;
      __pyx_v_minor = __pyx_t_4;
      __pyx_t_4 = 0;
/* … */
  __pyx_mstate_global->__pyx_slice[2] = PySlice_New(Py_None, __pyx_mstate_global->__pyx_int_2, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_slice[2])) __PYX_ERR(2, 4009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_slice[2]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_slice[2]);
+4010:         if (int(major), int(minor)) >= (1, 32):
      __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_major); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4010, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_PyNumber_Int(__pyx_v_minor); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4010, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4010, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_2);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2) != (0)) __PYX_ERR(2, 4010, __pyx_L4_error);
      __Pyx_GIVEREF(__pyx_t_4);
      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4) != (0)) __PYX_ERR(2, 4010, __pyx_L4_error);
      __pyx_t_2 = 0;
      __pyx_t_4 = 0;
      __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_mstate_global->__pyx_tuple[7], Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4010, __pyx_L4_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(2, 4010, __pyx_L4_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_6) {
/* … */
      }
/* … */
  __pyx_mstate_global->__pyx_tuple[7] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_int_1, __pyx_mstate_global->__pyx_int_32); if (unlikely(!__pyx_mstate_global->__pyx_tuple[7])) __PYX_ERR(2, 4010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[7]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[7]);
+4011:             return False
        __pyx_r = 0;
        goto __pyx_L8_try_return;
+4012:         return sys._getframe(0).f_globals.get('__name__', '').startswith(
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 4012, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_getframe); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 4012, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_5 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_12))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_12);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_12, __pyx__function);
        __pyx_t_5 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_int_0};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_12, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4012, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_f_globals); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 4012, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_get); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4012, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[8], NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 4012, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_1 = __pyx_t_12;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_5 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_polars_2};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_startswith, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4012, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 4012, __pyx_L4_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_r = __pyx_t_6;
      goto __pyx_L8_try_return;
/* … */
  __pyx_mstate_global->__pyx_tuple[8] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_n_u_name_2, __pyx_mstate_global->__pyx_kp_u__7); if (unlikely(!__pyx_mstate_global->__pyx_tuple[8])) __PYX_ERR(2, 4012, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[8]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[8]);
 4013:             'polars.')
+4014:     except Exception:
    __pyx_t_13 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_13) {
      __Pyx_ErrRestore(0,0,0);
+4015:         return False
      __pyx_r = 0;
      goto __pyx_L7_except_return;
    }
    goto __pyx_L6_except_error;
 4016: 
 4017: 
+4018: cdef str _query_result_reuse_message(object consumed_by):
static PyObject *__pyx_f_7questdb_7_client__query_result_reuse_message(PyObject *__pyx_v_consumed_by) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("questdb._client._query_result_reuse_message", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4019:     # `consumed_by` is None when the result was closed before any read.
+4020:     if consumed_by is None:
  __pyx_t_1 = (__pyx_v_consumed_by == Py_None);
  if (__pyx_t_1) {
/* … */
  }
+4021:         return 'QueryResult is closed. Run the query again to read the result.'
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_QueryResult_is_closed_Run_the_qu);
    __pyx_r = __pyx_mstate_global->__pyx_kp_u_QueryResult_is_closed_Run_the_qu;
    goto __pyx_L0;
+4022:     return (
  __Pyx_XDECREF(__pyx_r);
+4023:         f'QueryResult was already read by {consumed_by}. A result can be '
  __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_v_consumed_by, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3[0] = __pyx_mstate_global->__pyx_kp_u_QueryResult_was_already_read_by;
  __pyx_t_3[1] = __pyx_t_2;
  __pyx_t_3[2] = __pyx_mstate_global->__pyx_kp_u_A_result_can_be_read_only_once;
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, 32 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 79, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2));
  if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;
 4024:         'read only once. Run the query again to read the result again.')
 4025: 
 4026: 
+4027: class QueryResult:
  __pyx_t_18 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_mstate_global->__pyx_empty_tuple, __pyx_mstate_global->__pyx_n_u_QueryResult, __pyx_mstate_global->__pyx_n_u_QueryResult, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_kp_u_Result_of_QuestDB_query_sql_Stre); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 4027, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
/* … */
  __pyx_t_19 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_mstate_global->__pyx_n_u_QueryResult, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_18, NULL, 0, 0); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4027, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_QueryResult, __pyx_t_19) < (0)) __PYX_ERR(2, 4027, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
 4028:     """Result of ``QuestDB.query(sql)``.
 4029: 
 4030:     Streams query rows as Arrow record batches. **Single-use**: each
 4031:     materialisation method (``to_pandas``, ``to_arrow``, ``iter_arrow``,
 4032:     ``iter_pandas``, or the ``__arrow_c_stream__`` PyCapsule protocol)
 4033:     consumes the underlying cursor; the second consumption raises
 4034:     ``QuestDBError``. For the same reason it cannot be copied.
 4035: 
 4036:     **Consumption rule**: fully drain the result, use it as a context
 4037:     manager (``with db.query(...) as result:``), or call :meth:`close`.
 4038:     Closing a partial result drops its connection. Call :meth:`cancel`
 4039:     before closing to preserve it.
 4040: 
 4041:     **Thread hand-off**: a ``QueryResult`` may be transferred to another
 4042:     thread and consumed, cancelled, closed, or dropped there. Use a normal
 4043:     synchronisation hand-off (for example, ``Thread.start`` / ``join`` or a
 4044:     thread-safe queue), and access it from only one thread at a time.
 4045:     Concurrent operations on one result are unsupported. Calling ``close``
 4046:     or ``cancel`` from code that runs on the reading thread while the cursor
 4047:     is being read (a finalizer, say) raises ``InvalidApiCall`` instead of
 4048:     releasing an in-use cursor.
 4049: 
 4050:     ``__arrow_c_stream__`` is native — the cursor's record batches are
 4051:     exposed directly through the Arrow C Data Interface, so polars
 4052:     (``polars.DataFrame(result)``, polars 1.32 or later), duckdb
 4053:     (``duckdb.from_arrow(result)``, duckdb 1.2 or later) and other
 4054:     Arrow-native consumers can read query results without pyarrow
 4055:     installed. duckdb reads when you fetch, so fetch before the result is
 4056:     closed.
 4057:     ``to_pandas`` / ``iter_pandas`` are also pyarrow-free by default (a
 4058:     native numpy path); they only need pyarrow when ``dtype_backend`` /
 4059:     ``types_mapper`` is passed.
 4060:     ``to_arrow`` / ``iter_arrow`` / ``to_polars`` / ``iter_polars``
 4061:     do require pyarrow.
 4062: 
 4063:     **SYMBOL columns**: ``to_polars`` / ``to_pandas`` build the Categorical
 4064:     directly, interning the connection dictionary once (no per-row remap).
 4065:     ``to_arrow`` / ``iter_arrow`` / ``__arrow_c_stream__`` emit a generic Arrow
 4066:     form whose per-batch SYMBOL dictionary is compacted to the values each
 4067:     batch uses, which a generic consumer reconciles. So when the target is a
 4068:     polars / pandas frame, the dedicated methods avoid the re-reconciliation
 4069:     that ``polars.DataFrame(result)`` / ``to_arrow().to_pandas()`` pay on
 4070:     SYMBOL-heavy results. ``to_arrow().to_pandas()`` needs pyarrow 23 or
 4071:     later for SYMBOL columns, which use ``uint32`` dictionary indices.
 4072: 
 4073:     Example::
 4074: 
 4075:         with db.query('SELECT * FROM trades WHERE ts > $1',
 4076:                       [datetime.datetime(2026, 7, 1)]) as result:
 4077:             df = polars.DataFrame(result)              # no pyarrow
 4078:             # df = result.to_pandas()                   # no pyarrow
 4079:             # rows = duckdb.from_arrow(result).fetchall()  # no pyarrow
 4080:             # table = pa.table(result)                  # pyarrow required
 4081:     """
 4082: 
+4083:     def __init__(self, _CursorHandle cursor_handle):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_1__init__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_1__init__ = {"__init__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_1__init__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,&__pyx_mstate_global->__pyx_n_u_cursor_handle,0};
  PyObject* values[2] = {0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4083, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4083, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4083, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(2, 4083, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, i); __PYX_ERR(2, 4083, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4083, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4083, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
    __pyx_v_cursor_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, __pyx_nargs); __PYX_ERR(2, 4083, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cursor_handle), __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle, 1, "cursor_handle", 0))) __PYX_ERR(2, 4083, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult___init__(__pyx_self, __pyx_v_self, __pyx_v_cursor_handle);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_cursor_handle) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.QueryResult.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_1__init__, 0, __pyx_mstate_global->__pyx_n_u_QueryResult___init, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[94])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4083, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_init, __pyx_t_19) < (0)) __PYX_ERR(2, 4083, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+4084:         self._cursor_handle = cursor_handle
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cursor_handle_2, ((PyObject *)__pyx_v_cursor_handle)) < (0)) __PYX_ERR(2, 4084, __pyx_L1_error)
+4085:         self._cancel_handle = cursor_handle
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cancel_handle, ((PyObject *)__pyx_v_cursor_handle)) < (0)) __PYX_ERR(2, 4085, __pyx_L1_error)
+4086:         self._exec_done_handle = cursor_handle
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_exec_done_handle, ((PyObject *)__pyx_v_cursor_handle)) < (0)) __PYX_ERR(2, 4086, __pyx_L1_error)
+4087:         self._consumed = False
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed, Py_False) < (0)) __PYX_ERR(2, 4087, __pyx_L1_error)
+4088:         self._row_columns = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_columns, Py_None) < (0)) __PYX_ERR(2, 4088, __pyx_L1_error)
+4089:         self._row_iter = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_iter, Py_None) < (0)) __PYX_ERR(2, 4089, __pyx_L1_error)
 4090:         # The method that read the result, for the reuse error.
+4091:         self._consumed_by = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed_by, Py_None) < (0)) __PYX_ERR(2, 4091, __pyx_L1_error)
 4092:         # Set by `__arrow_c_schema__`: the stream producer that holds the
 4093:         # cursor and the first batch until `__arrow_c_stream__` takes it.
+4094:         self._schema_producer = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_producer, Py_None) < (0)) __PYX_ERR(2, 4094, __pyx_L1_error)
 4095:         # A saved copy of the schema for later `__arrow_c_schema__` calls.
+4096:         self._schema_box = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_box, Py_None) < (0)) __PYX_ERR(2, 4096, __pyx_L1_error)
 4097: 
+4098:     def _take_cursor_handle(self, str what):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_3_take_cursor_handle(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_3_take_cursor_handle = {"_take_cursor_handle", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_3_take_cursor_handle, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_3_take_cursor_handle(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_what = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_take_cursor_handle (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,&__pyx_mstate_global->__pyx_n_u_what,0};
  PyObject* values[2] = {0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4098, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4098, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4098, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_take_cursor_handle", 0) < (0)) __PYX_ERR(2, 4098, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_take_cursor_handle", 1, 2, 2, i); __PYX_ERR(2, 4098, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4098, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4098, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
    __pyx_v_what = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_take_cursor_handle", 1, 2, 2, __pyx_nargs); __PYX_ERR(2, 4098, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult._take_cursor_handle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_what), (&PyUnicode_Type), 1, "what", 1))) __PYX_ERR(2, 4098, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_2_take_cursor_handle(__pyx_self, __pyx_v_self, __pyx_v_what);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_2_take_cursor_handle(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_what) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client.QueryResult._take_cursor_handle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_3_take_cursor_handle, 0, __pyx_mstate_global->__pyx_n_u_QueryResult__take_cursor_handle, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[95])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_t_19) < (0)) __PYX_ERR(2, 4098, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4099:         cdef _CursorHandle handle
+4100:         if self._consumed:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 4100, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+4101:             if self._schema_producer is not None:
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_producer); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4101, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = (__pyx_t_1 != Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+4102:                 raise QuestDBError(
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4102, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
+4103:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4103, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4103, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_mstate_global->__pyx_kp_u_QueryResult___arrow_c_schema___r};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4102, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(2, 4102, __pyx_L1_error)
 4104:                     'QueryResult.__arrow_c_schema__() read the first batch '
 4105:                     '(pa.schema(result), polars.Schema(result) and duckdb '
 4106:                     '1.5 call it). Read the result through the Arrow stream, '
 4107:                     'for example with pa.table(result) or '
 4108:                     'polars.DataFrame(result), or run the query again.')
+4109:             if (self._consumed_by is None
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed_by); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = (__pyx_t_1 == Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_8) {
    } else {
      __pyx_t_2 = __pyx_t_8;
      goto __pyx_L6_bool_binop_done;
    }
/* … */
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+4110:                     and _cursor_handle_is_live(self._cancel_handle)):
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cancel_handle); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4110, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4110, __pyx_L1_error)
    __pyx_t_8 = __pyx_f_7questdb_7_client__cursor_handle_is_live(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1)); if (unlikely(__pyx_t_8 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(2, 4110, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_2 = __pyx_t_8;
    __pyx_L6_bool_binop_done:;
 4111:                 # cancel() dropped the batch that `__arrow_c_schema__`
 4112:                 # read, and the cursor stays open until close().
+4113:                 raise QuestDBError(
      __pyx_t_4 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4113, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+4114:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4114, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4114, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_7 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
        assert(__pyx_t_4);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
        __pyx_t_7 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_QueryResult_was_cancelled_after};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4113, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(2, 4113, __pyx_L1_error)
 4115:                     'QueryResult was cancelled after __arrow_c_schema__() '
 4116:                     'read its first batch. Call close(), then run the query '
 4117:                     'again to read the result.')
+4118:             raise QuestDBError(
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+4119:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+4120:                 _query_result_reuse_message(self._consumed_by))
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed_by); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = __pyx_f_7questdb_7_client__query_result_reuse_message(__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_3, __pyx_t_9};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4118, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 4118, __pyx_L1_error)
+4121:         handle = self._cursor_handle
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cursor_handle_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4121, __pyx_L1_error)
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
+4122:         if handle is None or self._cancel_handle is None:
  __pyx_t_8 = (((PyObject *)__pyx_v_handle) == Py_None);
  if (!__pyx_t_8) {
  } else {
    __pyx_t_2 = __pyx_t_8;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cancel_handle); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = __pyx_t_8;
  __pyx_L9_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+4123:             raise QuestDBError(
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
+4124:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4124, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4124, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+4125:                 _query_result_reuse_message(None))
    __pyx_t_3 = __pyx_f_7questdb_7_client__query_result_reuse_message(Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_6, __pyx_t_3};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4123, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 4123, __pyx_L1_error)
+4126:         if handle._cancelled:
  if (unlikely(__pyx_v_handle->_cancelled)) {
/* … */
  }
 4127:             # An empty result here would read as a non-SELECT.
+4128:             raise QuestDBError(
    __pyx_t_9 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4128, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
+4129:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
      assert(__pyx_t_9);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_9, __pyx_t_5, __pyx_mstate_global->__pyx_kp_u_QueryResult_was_cancelled_before};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4128, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(2, 4128, __pyx_L1_error)
 4130:                 'QueryResult was cancelled before it was read')
+4131:         self._consumed = True
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed, Py_True) < (0)) __PYX_ERR(2, 4131, __pyx_L1_error)
+4132:         self._consumed_by = what
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed_by, __pyx_v_what) < (0)) __PYX_ERR(2, 4132, __pyx_L1_error)
+4133:         self._cursor_handle = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cursor_handle_2, Py_None) < (0)) __PYX_ERR(2, 4133, __pyx_L1_error)
+4134:         return handle
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_handle);
  __pyx_r = ((PyObject *)__pyx_v_handle);
  goto __pyx_L0;
 4135: 
+4136:     def _drain(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_5_drain(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_5_drain = {"_drain", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_5_drain, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_5_drain(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_drain (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4136, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4136, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_drain", 0) < (0)) __PYX_ERR(2, 4136, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_drain", 1, 1, 1, i); __PYX_ERR(2, 4136, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4136, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_drain", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4136, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult._drain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_4_drain(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_4_drain(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QueryResult._drain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_5_drain, 0, __pyx_mstate_global->__pyx_n_u_QueryResult__drain, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[96])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_drain_2, __pyx_t_19) < (0)) __PYX_ERR(2, 4136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+4137:         _drain_cursor(self._take_cursor_handle('execute()'))
  __pyx_t_2 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_execute};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4137, __pyx_L1_error)
  __pyx_t_4 = __pyx_f_7questdb_7_client__drain_cursor(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1)); if (unlikely(__pyx_t_4 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 4137, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 4138: 
+4139:     def __arrow_c_schema__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_7__arrow_c_schema__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_6__arrow_c_schema__, "Arrow schema PyCapsule protocol (no pyarrow needed).\n\n        It reads the first batch to get the schema, and keeps that batch\n        for ``__arrow_c_stream__``. duckdb 1.5 calls it, so that\n        ``duckdb.from_arrow(result)`` opens the stream only once.\n        ``pa.schema(result)`` and ``polars.Schema(result)`` call it too.\n        After this call, read the result only through ``__arrow_c_stream__``\n        (``pa.table(result)``, ``polars.DataFrame(result)``, duckdb): the\n        other readers raise ``InvalidApiCall`` on their first read. When\n        the schema was read first, later calls return the same schema, also\n        after the stream was taken.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_7__arrow_c_schema__ = {"__arrow_c_schema__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_7__arrow_c_schema__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_6__arrow_c_schema__};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_7__arrow_c_schema__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__arrow_c_schema__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4139, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4139, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__arrow_c_schema__", 0) < (0)) __PYX_ERR(2, 4139, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__arrow_c_schema__", 1, 1, 1, i); __PYX_ERR(2, 4139, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4139, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__arrow_c_schema__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4139, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.__arrow_c_schema__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_6__arrow_c_schema__(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_6__arrow_c_schema__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod = 0;
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *__pyx_v_box = 0;
  PyObject *__pyx_v_exc = 0;
  int __pyx_v_rc;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client.QueryResult.__arrow_c_schema__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prod);
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XDECREF((PyObject *)__pyx_v_box);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_7__arrow_c_schema__, 0, __pyx_mstate_global->__pyx_n_u_QueryResult___arrow_c_schema, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[97])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_arrow_c_schema_2, __pyx_t_19) < (0)) __PYX_ERR(2, 4139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4140:         """Arrow schema PyCapsule protocol (no pyarrow needed).
 4141: 
 4142:         It reads the first batch to get the schema, and keeps that batch
 4143:         for ``__arrow_c_stream__``. duckdb 1.5 calls it, so that
 4144:         ``duckdb.from_arrow(result)`` opens the stream only once.
 4145:         ``pa.schema(result)`` and ``polars.Schema(result)`` call it too.
 4146:         After this call, read the result only through ``__arrow_c_stream__``
 4147:         (``pa.table(result)``, ``polars.DataFrame(result)``, duckdb): the
 4148:         other readers raise ``InvalidApiCall`` on their first read. When
 4149:         the schema was read first, later calls return the same schema, also
 4150:         after the stream was taken.
 4151:         """
 4152:         cdef _QueryStreamProducer prod
 4153:         cdef _CursorHandle handle
+4154:         cdef _ArrowSchemaBox box = self._schema_box
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_box); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__ArrowSchemaBox))))) __PYX_ERR(2, 4154, __pyx_L1_error)
  __pyx_v_box = ((struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *)__pyx_t_1);
  __pyx_t_1 = 0;
 4155:         cdef object exc
 4156:         cdef int rc
+4157:         if box is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_box) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
+4158:             return _arrow_schema_capsule(box)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7questdb_7_client__arrow_schema_capsule(__pyx_v_box); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4158, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+4159:         handle = self._take_cursor_handle('__arrow_c_schema__()')
  __pyx_t_3 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_arrow_c_schema};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4159, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4159, __pyx_L1_error)
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
+4160:         prod = _new_query_stream_producer(handle)
  __pyx_t_1 = ((PyObject *)__pyx_f_7questdb_7_client__new_query_stream_producer(__pyx_v_handle)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_prod = ((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_t_1);
  __pyx_t_1 = 0;
+4161:         self._schema_producer = prod
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_producer, ((PyObject *)__pyx_v_prod)) < (0)) __PYX_ERR(2, 4161, __pyx_L1_error)
+4162:         rc = _qs_ensure_schema(prod)
  __pyx_v_rc = __pyx_f_7questdb_7_client__qs_ensure_schema(__pyx_v_prod);
+4163:         if rc != 0:
  __pyx_t_2 = (__pyx_v_rc != 0);
  if (__pyx_t_2) {
/* … */
  }
 4164:             # Release the connection now, and raise the error with its own
 4165:             # type and code (as `to_arrow()` would).
+4166:             exc = prod.last_exc
    __pyx_t_1 = __pyx_v_prod->last_exc;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_exc = __pyx_t_1;
    __pyx_t_1 = 0;
+4167:             prod.last_exc = None
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_prod->last_exc);
    __Pyx_DECREF(__pyx_v_prod->last_exc);
    __pyx_v_prod->last_exc = Py_None;
+4168:             if exc is None and rc == 12:  # ENOMEM
    __pyx_t_5 = (__pyx_v_exc == Py_None);
    if (__pyx_t_5) {
    } else {
      __pyx_t_2 = __pyx_t_5;
      goto __pyx_L6_bool_binop_done;
    }
    __pyx_t_5 = (__pyx_v_rc == 12);
    __pyx_t_2 = __pyx_t_5;
    __pyx_L6_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
      goto __pyx_L5;
    }
+4169:                 exc = MemoryError()
      __pyx_t_3 = NULL;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4169, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF_SET(__pyx_v_exc, __pyx_t_1);
      __pyx_t_1 = 0;
+4170:             elif exc is None:
    __pyx_t_2 = (__pyx_v_exc == Py_None);
    if (__pyx_t_2) {
/* … */
    }
    __pyx_L5:;
+4171:                 exc = QuestDBError(
      __pyx_t_3 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4171, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
+4172:                     QuestDBErrorCode.InvalidApiCall,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4172, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 4172, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4173:                     'failed to read the result schema: ' + (
      __pyx_t_10 = __Pyx_PyUnicode_ConcatSafe(__pyx_mstate_global->__pyx_kp_u_failed_to_read_the_result_schema, __pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 4173, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_4 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
        assert(__pyx_t_3);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
        __pyx_t_4 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_8, __pyx_t_10};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4171, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_DECREF_SET(__pyx_v_exc, __pyx_t_1);
      __pyx_t_1 = 0;
+4174:                         (<bytes>prod.last_error).decode('utf-8', 'replace')
        __pyx_t_9 = __Pyx_PyBytes_FromString(__pyx_v_prod->last_error); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        if (unlikely(__pyx_t_9 == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode");
          __PYX_ERR(2, 4174, __pyx_L1_error)
        }
        __pyx_t_10 = __Pyx_decode_bytes(((PyObject*)__pyx_t_9), 0, PY_SSIZE_T_MAX, NULL, __pyx_k_replace, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 4174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_7 = __pyx_t_10;
        __pyx_t_10 = 0;
      } else {
        __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_out_of_memory);
        __pyx_t_7 = __pyx_mstate_global->__pyx_kp_u_out_of_memory;
      }
+4175:                         if prod.last_error != NULL else 'out of memory'))
      __pyx_t_2 = (__pyx_v_prod->last_error != NULL);
      if (__pyx_t_2) {
 4176:             # Nothing was read: a later read says "closed", not "read by".
+4177:             self._schema_producer = None
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_producer, Py_None) < (0)) __PYX_ERR(2, 4177, __pyx_L1_error)
+4178:             self._consumed_by = None
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed_by, Py_None) < (0)) __PYX_ERR(2, 4178, __pyx_L1_error)
+4179:             prod._free_cached()
    ((struct __pyx_vtabstruct_7questdb_7_client__QueryStreamProducer *)__pyx_v_prod->__pyx_vtab)->_free_cached(__pyx_v_prod);
+4180:             handle._free()
    ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_free(__pyx_v_handle);
+4181:             raise exc
    __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
    __PYX_ERR(2, 4181, __pyx_L1_error)
+4182:         box = _arrow_schema_box(&prod.cached_schema)
  __pyx_t_1 = ((PyObject *)__pyx_f_7questdb_7_client__arrow_schema_box((&__pyx_v_prod->cached_schema))); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_box, ((struct __pyx_obj_7questdb_7_client__ArrowSchemaBox *)__pyx_t_1));
  __pyx_t_1 = 0;
+4183:         self._schema_box = box
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_box, ((PyObject *)__pyx_v_box)) < (0)) __PYX_ERR(2, 4183, __pyx_L1_error)
+4184:         return _arrow_schema_capsule(box)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7questdb_7_client__arrow_schema_capsule(__pyx_v_box); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4185: 
+4186:     def __arrow_c_stream__(self, requested_schema=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_9__arrow_c_stream__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_8__arrow_c_stream__, "Arrow C stream PyCapsule protocol (no pyarrow needed). SYMBOL\n        columns arrive compact \342\200\224 each batch's dictionary holds only the values\n        it references \342\200\224 so a consumer that unifies per-batch dictionaries\n        (e.g. ``polars.DataFrame(result)`` on polars 1.32 or later)\n        reconciles them. Older polars misreads such a stream, so when polars\n        before 1.32 reads the result directly (``polars.DataFrame(result)``,\n        ``polars.from_arrow(result)``), the call raises ``InvalidApiCall``\n        and the result stays unread. A stream that reaches polars through\n        another library is not checked.\n\n        ``requested_schema`` is ignored, also when it does not match: the\n        stream always has the result's own schema, so check the schema you\n        get. ``pa.table(result, schema=...)`` and\n        ``polars.DataFrame(result, schema=...)`` cast the result;\n        ``pa.RecordBatchReader.from_stream(result, schema=...)`` (pyarrow\n        15 or later) returns the result's own schema.\n\n        The stream releases the result's connection when the consumer\n        reads the last batch, not when it releases the stream. A reader\n        lease can run its next query as soon as the stream is drained.\n\n        The stream does not replay a result: after a batch has been\n        delivered, a failover ends the stream with an error. The consumer\n        raises its own exception type, and the message contains\n        ``[FailoverWouldDuplicate]``; re-issue the query. polars raises a\n        ``ComputeError``, but polars before 1.37.1 raises a\n        ``PanicException``, which ``except Exception`` does not catch.\n\n        The returned stream may be handed to a consumer worker thread.\n        The cursor lock serialises the native cursor calls, not the\n        stream's own state, so the Arrow C stream must be consumed by only\n        one thread at a time; concurrent ``get_next`` / ``release`` calls\n        are"" unsupported.\n\n        Token providers (``oidc_auth=`` and ``bearer_token_provider=``): when\n        a reconnect while the stream is being read needs a fresh token and\n        the provider cannot supply one, the consumer raises its own exception\n        type (pyarrow raises ``OSError``) carrying the provider's message,\n        **not** :class:`~questdb.auth.OidcError` or\n        :class:`~questdb.auth.TokenUnavailableError`: the Arrow C-stream\n        boundary carries only an error string, not a Python exception type.\n        ``query()`` itself and the Python-driven readers (:meth:`iter_arrow`,\n        :meth:`to_pandas`, :meth:`to_arrow`, :meth:`to_polars`) raise the\n        typed error; read the result with one of those when it must be\n        caught. With ``oidc_auth=``, also call\n        :meth:`~questdb.auth.OidcDeviceAuth.sign_in` up front, so that a\n        reconnect mid-stream needs no new sign-in.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_9__arrow_c_stream__ = {"__arrow_c_stream__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_9__arrow_c_stream__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_8__arrow_c_stream__};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_9__arrow_c_stream__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_requested_schema = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__arrow_c_stream__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,&__pyx_mstate_global->__pyx_n_u_requested_schema,0};
  PyObject* values[2] = {0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4186, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4186, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4186, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__arrow_c_stream__", 0) < (0)) __PYX_ERR(2, 4186, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__arrow_c_stream__", 0, 1, 2, i); __PYX_ERR(2, 4186, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4186, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4186, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_self = values[0];
    __pyx_v_requested_schema = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__arrow_c_stream__", 0, 1, 2, __pyx_nargs); __PYX_ERR(2, 4186, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.__arrow_c_stream__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_8__arrow_c_stream__(__pyx_self, __pyx_v_self, __pyx_v_requested_schema);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_8__arrow_c_stream__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_requested_schema) {
  struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod = 0;
  PyObject *__pyx_v_capsule = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("questdb._client.QueryResult.__arrow_c_stream__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prod);
  __Pyx_XDECREF(__pyx_v_capsule);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_9__arrow_c_stream__, 0, __pyx_mstate_global->__pyx_n_u_QueryResult___arrow_c_stream, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[98])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_19, __pyx_mstate_global->__pyx_tuple[24]);
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_arrow_c_stream_2, __pyx_t_19) < (0)) __PYX_ERR(2, 4186, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
  __pyx_mstate_global->__pyx_tuple[24] = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[24])) __PYX_ERR(2, 4186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[24]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[24]);
 4187:         """Arrow C stream PyCapsule protocol (no pyarrow needed). SYMBOL
 4188:         columns arrive compact — each batch's dictionary holds only the values
 4189:         it references — so a consumer that unifies per-batch dictionaries
 4190:         (e.g. ``polars.DataFrame(result)`` on polars 1.32 or later)
 4191:         reconciles them. Older polars misreads such a stream, so when polars
 4192:         before 1.32 reads the result directly (``polars.DataFrame(result)``,
 4193:         ``polars.from_arrow(result)``), the call raises ``InvalidApiCall``
 4194:         and the result stays unread. A stream that reaches polars through
 4195:         another library is not checked.
 4196: 
 4197:         ``requested_schema`` is ignored, also when it does not match: the
 4198:         stream always has the result's own schema, so check the schema you
 4199:         get. ``pa.table(result, schema=...)`` and
 4200:         ``polars.DataFrame(result, schema=...)`` cast the result;
 4201:         ``pa.RecordBatchReader.from_stream(result, schema=...)`` (pyarrow
 4202:         15 or later) returns the result's own schema.
 4203: 
 4204:         The stream releases the result's connection when the consumer
 4205:         reads the last batch, not when it releases the stream. A reader
 4206:         lease can run its next query as soon as the stream is drained.
 4207: 
 4208:         The stream does not replay a result: after a batch has been
 4209:         delivered, a failover ends the stream with an error. The consumer
 4210:         raises its own exception type, and the message contains
 4211:         ``[FailoverWouldDuplicate]``; re-issue the query. polars raises a
 4212:         ``ComputeError``, but polars before 1.37.1 raises a
 4213:         ``PanicException``, which ``except Exception`` does not catch.
 4214: 
 4215:         The returned stream may be handed to a consumer worker thread.
 4216:         The cursor lock serialises the native cursor calls, not the
 4217:         stream's own state, so the Arrow C stream must be consumed by only
 4218:         one thread at a time; concurrent ``get_next`` / ``release`` calls
 4219:         are unsupported.
 4220: 
 4221:         Token providers (``oidc_auth=`` and ``bearer_token_provider=``): when
 4222:         a reconnect while the stream is being read needs a fresh token and
 4223:         the provider cannot supply one, the consumer raises its own exception
 4224:         type (pyarrow raises ``OSError``) carrying the provider's message,
 4225:         **not** :class:`~questdb.auth.OidcError` or
 4226:         :class:`~questdb.auth.TokenUnavailableError`: the Arrow C-stream
 4227:         boundary carries only an error string, not a Python exception type.
 4228:         ``query()`` itself and the Python-driven readers (:meth:`iter_arrow`,
 4229:         :meth:`to_pandas`, :meth:`to_arrow`, :meth:`to_polars`) raise the
 4230:         typed error; read the result with one of those when it must be
 4231:         caught. With ``oidc_auth=``, also call
 4232:         :meth:`~questdb.auth.OidcDeviceAuth.sign_in` up front, so that a
 4233:         reconnect mid-stream needs no new sign-in.
 4234:         """
 4235:         cdef _QueryStreamProducer prod
+4236:         if _called_by_old_polars():
  __pyx_t_1 = __pyx_f_7questdb_7_client__called_by_old_polars(); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(2, 4236, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+4237:             raise QuestDBError(
    __pyx_t_3 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+4238:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+4239:                 f'polars {sys.modules["polars"].__version__} misreads '
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sys); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4239, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_modules); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4239, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_polars); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4239, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_version_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4239, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_7, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4239, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_polars_3;
    __pyx_t_8[1] = __pyx_t_5;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_misreads_multi_batch_query_resu;
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 73, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5));
    if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4239, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 4240:                 'multi-batch query results. Upgrade to polars 1.32 or '
+4241:                 'later, or ' + (
    __pyx_t_9 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      assert(__pyx_t_3);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_9};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (3-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4237, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 4237, __pyx_L1_error)
 4242:                     'run the query again and call to_polars().'
+4243:                     if self._consumed else 'call result.to_polars().'))
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4243, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 4243, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_1) {
      __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_run_the_query_again_and_call_to);
      __pyx_t_5 = __pyx_mstate_global->__pyx_kp_u_run_the_query_again_and_call_to;
    } else {
      __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_call_result_to_polars);
      __pyx_t_5 = __pyx_mstate_global->__pyx_kp_u_call_result_to_polars;
    }
 4244:         # Read the field after the check, which runs Python code.
+4245:         prod = self._schema_producer
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_producer); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__QueryStreamProducer))))) __PYX_ERR(2, 4245, __pyx_L1_error)
  __pyx_v_prod = ((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_t_2);
  __pyx_t_2 = 0;
 4246:         # Streaming: hand batches out incrementally. A post-delivery
 4247:         # failover bumps the cursor's _reset_seq; the capsule producer
 4248:         # surfaces FailoverWouldDuplicate rather than feeding the
 4249:         # replayed batch-0 as a duplicate (see _qs_pull).
+4250:         if prod is not None:
  __pyx_t_1 = (((PyObject *)__pyx_v_prod) != Py_None);
  if (__pyx_t_1) {
/* … */
  }
 4251:             # `__arrow_c_schema__` already pulled the first batch: hand
 4252:             # out that producer. Clear the field only when the capsule
 4253:             # exists, so that close() still reaches the cursor on failure.
+4254:             capsule = _query_stream_capsule(prod)
    __pyx_t_2 = __pyx_f_7questdb_7_client__query_stream_capsule(__pyx_v_prod); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_capsule = __pyx_t_2;
    __pyx_t_2 = 0;
+4255:             self._schema_producer = None
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_producer, Py_None) < (0)) __PYX_ERR(2, 4255, __pyx_L1_error)
+4256:             self._consumed_by = '__arrow_c_stream__()'
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed_by, __pyx_mstate_global->__pyx_kp_u_arrow_c_stream) < (0)) __PYX_ERR(2, 4256, __pyx_L1_error)
+4257:             return capsule
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_capsule);
    __pyx_r = __pyx_v_capsule;
    goto __pyx_L0;
+4258:         return _query_stream_capsule(_new_query_stream_producer(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_4 = ((PyObject *)__pyx_f_7questdb_7_client__new_query_stream_producer(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_2))); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_f_7questdb_7_client__query_stream_capsule(((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
+4259:             self._take_cursor_handle('__arrow_c_stream__()')))
  __pyx_t_4 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_10 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_arrow_c_stream};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4259, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4259, __pyx_L1_error)
 4260: 
+4261:     def to_arrow(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_11to_arrow(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_10to_arrow, "Read the full result into a ``pyarrow.Table``. Requires pyarrow.\n\n        SYMBOL columns use ``uint32`` dictionary indices, which\n        ``Table.to_pandas()`` accepts only from pyarrow 23. For a pandas\n        frame, call :meth:`to_pandas` instead. DECIMAL columns with a\n        precision of 18 or less arrive as ``decimal32`` / ``decimal64``,\n        which need pyarrow 20 or later.\n\n        Materialise-whole: a mid-query failover replays the result\n        transparently \342\200\224 the partial accumulation we hold is discarded\n        from batch-0. The streaming path (``__arrow_c_stream__``, as\n        consumed by ``polars.DataFrame(result)`` or ``pa.table(result)``)\n        does not replay: on a post-delivery failover, the consumer raises\n        its own error, and the message contains\n        ``[FailoverWouldDuplicate]``.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_11to_arrow = {"to_arrow", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_11to_arrow, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_10to_arrow};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_11to_arrow(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_arrow (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4261, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4261, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "to_arrow", 0) < (0)) __PYX_ERR(2, 4261, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("to_arrow", 1, 1, 1, i); __PYX_ERR(2, 4261, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4261, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_arrow", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4261, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.to_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_10to_arrow(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_10to_arrow(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_v_pa = NULL;
  PyObject *__pyx_v_handle = NULL;
  PyObject *__pyx_v_schema = NULL;
  PyObject *__pyx_v_batches = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("questdb._client.QueryResult.to_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pa);
  __Pyx_XDECREF(__pyx_v_handle);
  __Pyx_XDECREF(__pyx_v_schema);
  __Pyx_XDECREF(__pyx_v_batches);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_11to_arrow, 0, __pyx_mstate_global->__pyx_n_u_QueryResult_to_arrow, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[99])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_to_arrow_2, __pyx_t_19) < (0)) __PYX_ERR(2, 4261, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4262:         """Read the full result into a ``pyarrow.Table``. Requires pyarrow.
 4263: 
 4264:         SYMBOL columns use ``uint32`` dictionary indices, which
 4265:         ``Table.to_pandas()`` accepts only from pyarrow 23. For a pandas
 4266:         frame, call :meth:`to_pandas` instead. DECIMAL columns with a
 4267:         precision of 18 or less arrive as ``decimal32`` / ``decimal64``,
 4268:         which need pyarrow 20 or later.
 4269: 
 4270:         Materialise-whole: a mid-query failover replays the result
 4271:         transparently — the partial accumulation we hold is discarded
 4272:         from batch-0. The streaming path (``__arrow_c_stream__``, as
 4273:         consumed by ``polars.DataFrame(result)`` or ``pa.table(result)``)
 4274:         does not replay: on a post-delivery failover, the consumer raises
 4275:         its own error, and the message contains
 4276:         ``[FailoverWouldDuplicate]``.
 4277:         """
+4278:         import pyarrow as pa
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pyarrow, 0, 0, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4278, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_pa = __pyx_t_1;
  __pyx_t_1 = 0;
+4279:         handle = self._take_cursor_handle('to_arrow()')
  __pyx_t_3 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_to_arrow};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_handle = __pyx_t_1;
  __pyx_t_1 = 0;
+4280:         schema, batches = _fetch_all_record_batches(handle, pa, True)
  if (!(likely(((__pyx_v_handle) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_handle, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4280, __pyx_L1_error)
  __pyx_t_5.__pyx_n = 1;
  __pyx_t_5.compact = 1;
  __pyx_t_1 = __pyx_f_7questdb_7_client__fetch_all_record_batches(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_v_handle), __pyx_v_pa, &__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (likely(__pyx_t_1 != Py_None)) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(2, 4280, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1);
    __Pyx_INCREF(__pyx_t_6);
    #else
    __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4280, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4280, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 4280, __pyx_L1_error)
  }
  __pyx_v_schema = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_batches = __pyx_t_6;
  __pyx_t_6 = 0;
+4281:         if schema is None:
  __pyx_t_7 = (__pyx_v_schema == Py_None);
  if (__pyx_t_7) {
/* … */
  }
+4282:             return pa.table({})
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_3};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_table, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4282, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
+4283:         return pa.Table.from_batches(batches, schema)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4283, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __pyx_t_6;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_batches, __pyx_v_schema};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_batches, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4284: 
+4285:     def to_pandas(self, *, dtype_backend=None, types_mapper=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_13to_pandas(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_12to_pandas, "Read the full result into a ``pandas.DataFrame``.\n\n        The default is a native (no pyarrow) hybrid built straight from\n        the QWP column buffers: a nullable integer column\n        with nulls becomes a pandas nullable ``Int*`` (``pd.NA``); without\n        nulls it stays plain numpy. ``double``/``float`` stay numpy with\n        ``NaN``; ``SYMBOL`` \342\206\222 ``Categorical``; ``TIMESTAMP`` \342\206\222\n        ``datetime64`` (``NaT``); strings/decimal/uuid/binary \342\206\222 ``object``.\n        With no arguments or a ``dtype_backend``, a ``GEOHASH`` column is\n        a signed integer sized by its precision: ``int8`` up to 7 bits,\n        ``int16`` to 15, ``int32`` to 31, ``int64`` to 60, as\n        :meth:`to_arrow` gives it.\n        Analysis-safe (aggregations skip ``pd.NA``/``NaN``), and feeds back\n        into :meth:`QuestDB.dataframe` for a type round-trip \342\200\224 the column\n        kinds are carried in ``df.attrs['questdb']``.\n\n        ``dtype_backend=\"pyarrow\"`` / ``\"numpy_nullable\"`` / ``types_mapper``\n        select the pyarrow-backed path instead (``pd.ArrowDtype``, pandas\n        nullable extension dtypes, or a custom mapper) \342\200\224 matching the\n        ``pd.read_sql`` / ``pd.read_parquet`` convention. Those paths\n        attach ``df.attrs['questdb']`` too: a pandas dtype holds an Arrow\n        type and no field, so ``attrs`` is what carries the IPV4 / CHAR /\n        GEOHASH / UUID / LONG256 claims that live in Arrow field metadata.\n        :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>` reads the\n        claim back from either built-in backend \342\200\224 including the masked\n        and object-dtype columns ``\"numpy_nullable\"`` produces for those\n        five \342\200\224 so writing the result out again gives the same column\n        types, and for those five the same wire bytes.\n\n        A custom ``types_mapper`` gets the same ``attrs``, but whether\n        the claim can be applied depends on ""the dtype the mapper picked.\n        It has to be a shape that still holds the value:\n        an Arrow-backed column, a NumPy ``uint32`` / ``uint16`` / integer\n        column, or an object column of Python ints or ``bytes``. Map one\n        of those five columns to a float or a string dtype and the claim\n        is ignored \342\200\224 the column lands as that dtype implies, and\n        re-ingestion logs a ``questdb`` warning about the dropped claim.\n\n        ``df.attrs['questdb']`` reads as an ordinary mapping but cannot\n        be edited in place: pandas deep-copies the whole of ``attrs``\n        once per column whenever it propagates it, so a per-column claim\n        that copied would make slicing and exporting quadratic in the\n        column count. Every copy of the frame shares the one claim\n        instead. To change what a frame claims, assign a new mapping to\n        ``df.attrs['questdb']``, or state the type outright with\n        ``schema_overrides`` / ``symbols``, which outrank it.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_13to_pandas = {"to_pandas", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_13to_pandas, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_12to_pandas};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_13to_pandas(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_dtype_backend = 0;
  PyObject *__pyx_v_types_mapper = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_pandas (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,&__pyx_mstate_global->__pyx_n_u_dtype_backend_2,&__pyx_mstate_global->__pyx_n_u_types_mapper,0};
  PyObject* values[3] = {0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4285, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4285, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "to_pandas", 0) < (0)) __PYX_ERR(2, 4285, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("to_pandas", 1, 1, 1, i); __PYX_ERR(2, 4285, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4285, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_self = values[0];
    __pyx_v_dtype_backend = values[1];
    __pyx_v_types_mapper = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_pandas", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4285, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.to_pandas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_12to_pandas(__pyx_self, __pyx_v_self, __pyx_v_dtype_backend, __pyx_v_types_mapper);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_12to_pandas(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_dtype_backend, PyObject *__pyx_v_types_mapper) {
  PyObject *__pyx_v_pa = NULL;
  PyObject *__pyx_v_kwargs = NULL;
  PyObject *__pyx_v_handle = NULL;
  PyObject *__pyx_v_schema = NULL;
  PyObject *__pyx_v_batches = NULL;
  PyObject *__pyx_v_table = NULL;
  PyObject *__pyx_v_frame = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("questdb._client.QueryResult.to_pandas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pa);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_XDECREF(__pyx_v_handle);
  __Pyx_XDECREF(__pyx_v_schema);
  __Pyx_XDECREF(__pyx_v_batches);
  __Pyx_XDECREF(__pyx_v_table);
  __Pyx_XDECREF(__pyx_v_frame);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_dtype_backend_2, Py_None) < (0)) __PYX_ERR(2, 4285, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_19, __pyx_mstate_global->__pyx_n_u_types_mapper, Py_None) < (0)) __PYX_ERR(2, 4285, __pyx_L1_error)
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_13to_pandas, 0, __pyx_mstate_global->__pyx_n_u_QueryResult_to_pandas, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[100])); if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 4285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_20, __pyx_t_19);
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_to_pandas_2, __pyx_t_20) < (0)) __PYX_ERR(2, 4285, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 4286:         """Read the full result into a ``pandas.DataFrame``.
 4287: 
 4288:         The default is a native (no pyarrow) hybrid built straight from
 4289:         the QWP column buffers: a nullable integer column
 4290:         with nulls becomes a pandas nullable ``Int*`` (``pd.NA``); without
 4291:         nulls it stays plain numpy. ``double``/``float`` stay numpy with
 4292:         ``NaN``; ``SYMBOL`` → ``Categorical``; ``TIMESTAMP`` →
 4293:         ``datetime64`` (``NaT``); strings/decimal/uuid/binary → ``object``.
 4294:         With no arguments or a ``dtype_backend``, a ``GEOHASH`` column is
 4295:         a signed integer sized by its precision: ``int8`` up to 7 bits,
 4296:         ``int16`` to 15, ``int32`` to 31, ``int64`` to 60, as
 4297:         :meth:`to_arrow` gives it.
 4298:         Analysis-safe (aggregations skip ``pd.NA``/``NaN``), and feeds back
 4299:         into :meth:`QuestDB.dataframe` for a type round-trip — the column
 4300:         kinds are carried in ``df.attrs['questdb']``.
 4301: 
 4302:         ``dtype_backend="pyarrow"`` / ``"numpy_nullable"`` / ``types_mapper``
 4303:         select the pyarrow-backed path instead (``pd.ArrowDtype``, pandas
 4304:         nullable extension dtypes, or a custom mapper) — matching the
 4305:         ``pd.read_sql`` / ``pd.read_parquet`` convention. Those paths
 4306:         attach ``df.attrs['questdb']`` too: a pandas dtype holds an Arrow
 4307:         type and no field, so ``attrs`` is what carries the IPV4 / CHAR /
 4308:         GEOHASH / UUID / LONG256 claims that live in Arrow field metadata.
 4309:         :meth:`QuestDB.dataframe <questdb.QuestDB.dataframe>` reads the
 4310:         claim back from either built-in backend — including the masked
 4311:         and object-dtype columns ``"numpy_nullable"`` produces for those
 4312:         five — so writing the result out again gives the same column
 4313:         types, and for those five the same wire bytes.
 4314: 
 4315:         A custom ``types_mapper`` gets the same ``attrs``, but whether
 4316:         the claim can be applied depends on the dtype the mapper picked.
 4317:         It has to be a shape that still holds the value:
 4318:         an Arrow-backed column, a NumPy ``uint32`` / ``uint16`` / integer
 4319:         column, or an object column of Python ints or ``bytes``. Map one
 4320:         of those five columns to a float or a string dtype and the claim
 4321:         is ignored — the column lands as that dtype implies, and
 4322:         re-ingestion logs a ``questdb`` warning about the dropped claim.
 4323: 
 4324:         ``df.attrs['questdb']`` reads as an ordinary mapping but cannot
 4325:         be edited in place: pandas deep-copies the whole of ``attrs``
 4326:         once per column whenever it propagates it, so a per-column claim
 4327:         that copied would make slicing and exporting quadratic in the
 4328:         column count. Every copy of the frame shares the one claim
 4329:         instead. To change what a frame claims, assign a new mapping to
 4330:         ``df.attrs['questdb']``, or state the type outright with
 4331:         ``schema_overrides`` / ``symbols``, which outrank it.
 4332:         """
+4333:         if dtype_backend is not None and types_mapper is not None:
  __pyx_t_2 = (__pyx_v_dtype_backend != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_types_mapper != Py_None);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+4334:             raise ValueError(
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_pass_at_most_one_of_dtype_backen};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4334, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 4334, __pyx_L1_error)
 4335:                 'pass at most one of dtype_backend, types_mapper')
+4336:         if dtype_backend is None and types_mapper is None:
  __pyx_t_2 = (__pyx_v_dtype_backend == Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_types_mapper == Py_None);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+4337:             return self._to_pandas_numpy()
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_v_self;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_pandas_numpy, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4337, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
+4338:         import pyarrow as pa
  __pyx_t_6 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pyarrow, 0, 0, NULL, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4338, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_6;
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_pa = __pyx_t_3;
  __pyx_t_3 = 0;
 4339:         # Check the arguments before the result is read: a bad value must
 4340:         # not consume the cursor.
+4341:         kwargs = _resolve_arrow_to_pandas_kwargs(dtype_backend, types_mapper)
  __pyx_t_3 = __pyx_f_7questdb_7_client__resolve_arrow_to_pandas_kwargs(__pyx_v_dtype_backend, __pyx_v_types_mapper); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_kwargs = __pyx_t_3;
  __pyx_t_3 = 0;
+4342:         handle = self._take_cursor_handle('to_pandas()')
  __pyx_t_4 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_to_pandas};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_v_handle = __pyx_t_3;
  __pyx_t_3 = 0;
+4343:         schema, batches = _fetch_all_record_batches(handle, pa)
  if (!(likely(((__pyx_v_handle) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_handle, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4343, __pyx_L1_error)
  __pyx_t_3 = __pyx_f_7questdb_7_client__fetch_all_record_batches(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_v_handle), __pyx_v_pa, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (likely(__pyx_t_3 != Py_None)) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(2, 4343, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0);
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1);
    __Pyx_INCREF(__pyx_t_7);
    #else
    __pyx_t_4 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 4343, __pyx_L1_error)
  }
  __pyx_v_schema = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_batches = __pyx_t_7;
  __pyx_t_7 = 0;
+4344:         table = (pa.table({}) if schema is None
  __pyx_t_1 = (__pyx_v_schema == Py_None);
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_8 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 4344, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_8};
      __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_table, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4344, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_t_3 = __pyx_t_7;
    __pyx_t_7 = 0;
  } else {
+4345:                  else _table_shared_symbol_dict(
    __pyx_t_4 = __pyx_f_7questdb_7_client__table_shared_symbol_dict(__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_3 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  __pyx_v_table = __pyx_t_3;
  __pyx_t_3 = 0;
+4346:                      pa.Table.from_batches(batches, schema)))
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = __pyx_t_4;
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_v_batches, __pyx_v_schema};
      __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_batches, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4346, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
+4347:         frame = table.to_pandas(**kwargs)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_to_pandas_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (unlikely(__pyx_v_kwargs == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
    __PYX_ERR(2, 4347, __pyx_L1_error)
  }
  if (likely(PyDict_CheckExact(__pyx_v_kwargs))) {
    __pyx_t_4 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  } else {
    __pyx_t_4 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_v_kwargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_frame = __pyx_t_7;
  __pyx_t_7 = 0;
+4348:         return _attach_arrow_roundtrip_attrs(frame, table.schema)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_table, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = __pyx_f_7questdb_7_client__attach_arrow_roundtrip_attrs(__pyx_v_frame, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 4349: 
+4350:     def to_polars(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_15to_polars(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_14to_polars, "Read the full result into a ``polars.DataFrame``. Requires polars\n        and pyarrow.\n\n        Non-``SYMBOL`` columns keep their exact ``polars.from_arrow`` dtypes\n        (tz-aware ``Datetime``, ``Decimal``, ``Binary``, ``List``/``Array``,\n        \342\200\246). ``SYMBOL`` columns are built into a polars ``Categorical`` directly\n        from their codes + dictionary through a persistent ``Categories``\n        registry \342\200\224 the wire code is its own physical categorical code, so\n        there is no per-row ``Dictionary -> Categorical`` remap. Falls back to\n        ``polars.from_arrow`` when polars' (unstable) ``Categories`` API is\n        unavailable. If that path fails, it also falls back and issues a\n        ``RuntimeWarning``: the values stay correct, but the read is slower.\n        Under ``-W error`` that warning raises after the result was read,\n        so the frame is lost; run the query again.\n\n        Materialise-whole: a mid-query failover replays the result\n        transparently. This accumulates batches in-library (via pyarrow)\n        so the partial result can be discarded on failover. The\n        pyarrow-free ``polars.DataFrame(result)`` streams through\n        ``__arrow_c_stream__`` and does not replay: on a post-delivery\n        failover, polars raises its own error, and the message contains\n        ``[FailoverWouldDuplicate]``. polars before 1.37.1 raises a\n        ``PanicException``, which ``except Exception`` does not catch.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_15to_polars = {"to_polars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_15to_polars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_14to_polars};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_15to_polars(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_polars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4350, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4350, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "to_polars", 0) < (0)) __PYX_ERR(2, 4350, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("to_polars", 1, 1, 1, i); __PYX_ERR(2, 4350, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4350, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_polars", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4350, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.to_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_14to_polars(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_14to_polars(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_v_pl = NULL;
  PyObject *__pyx_v_ie = NULL;
  PyObject *__pyx_v_pa = NULL;
  PyObject *__pyx_v_handle = NULL;
  PyObject *__pyx_v_schema = NULL;
  PyObject *__pyx_v_batches = NULL;
  PyObject *__pyx_v_table = NULL;
  PyObject *__pyx_v_exc = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client.QueryResult.to_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pl);
  __Pyx_XDECREF(__pyx_v_ie);
  __Pyx_XDECREF(__pyx_v_pa);
  __Pyx_XDECREF(__pyx_v_handle);
  __Pyx_XDECREF(__pyx_v_schema);
  __Pyx_XDECREF(__pyx_v_batches);
  __Pyx_XDECREF(__pyx_v_table);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_15to_polars, 0, __pyx_mstate_global->__pyx_n_u_QueryResult_to_polars, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[101])); if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 4350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_to_polars_2, __pyx_t_20) < (0)) __PYX_ERR(2, 4350, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
 4351:         """Read the full result into a ``polars.DataFrame``. Requires polars
 4352:         and pyarrow.
 4353: 
 4354:         Non-``SYMBOL`` columns keep their exact ``polars.from_arrow`` dtypes
 4355:         (tz-aware ``Datetime``, ``Decimal``, ``Binary``, ``List``/``Array``,
 4356:         …). ``SYMBOL`` columns are built into a polars ``Categorical`` directly
 4357:         from their codes + dictionary through a persistent ``Categories``
 4358:         registry — the wire code is its own physical categorical code, so
 4359:         there is no per-row ``Dictionary -> Categorical`` remap. Falls back to
 4360:         ``polars.from_arrow`` when polars' (unstable) ``Categories`` API is
 4361:         unavailable. If that path fails, it also falls back and issues a
 4362:         ``RuntimeWarning``: the values stay correct, but the read is slower.
 4363:         Under ``-W error`` that warning raises after the result was read,
 4364:         so the frame is lost; run the query again.
 4365: 
 4366:         Materialise-whole: a mid-query failover replays the result
 4367:         transparently. This accumulates batches in-library (via pyarrow)
 4368:         so the partial result can be discarded on failover. The
 4369:         pyarrow-free ``polars.DataFrame(result)`` streams through
 4370:         ``__arrow_c_stream__`` and does not replay: on a post-delivery
 4371:         failover, polars raises its own error, and the message contains
 4372:         ``[FailoverWouldDuplicate]``. polars before 1.37.1 raises a
 4373:         ``PanicException``, which ``except Exception`` does not catch.
 4374:         """
+4375:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+4376:             import polars as pl
      __pyx_t_5 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_polars, 0, 0, NULL, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4376, __pyx_L3_error)
      __pyx_t_4 = __pyx_t_5;
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_pl = __pyx_t_4;
      __pyx_t_4 = 0;
+4377:         except ImportError as ie:
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError))));
    if (__pyx_t_6) {
      __Pyx_AddTraceback("questdb._client.QueryResult.to_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(2, 4377, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_v_ie = __pyx_t_7;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L14_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_5 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
          if ( unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_14, &__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_5);
          __Pyx_XGOTREF(__pyx_t_14);
          __Pyx_XGOTREF(__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_18);
          __pyx_t_6 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_ie); __pyx_v_ie = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_5);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_ErrRestore(__pyx_t_5, __pyx_t_14, __pyx_t_15);
          __pyx_t_5 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
          __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
+4378:             raise ImportError(
        __pyx_t_10 = NULL;
        __pyx_t_11 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_polars_is_required_for_to_polar};
          __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ImportError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4378, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_9);
        }
 4379:                 '`polars` is required for `to_polars()`. '
+4380:                 'Install with `pip install polars`.') from ie
        __Pyx_Raise(__pyx_t_9, 0, 0, __pyx_v_ie);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __PYX_ERR(2, 4378, __pyx_L14_error)
      }
+4381:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L25_try_end;
    __pyx_L20_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L22_except_error:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
    goto __pyx_L1_error;
    __pyx_L25_try_end:;
  }
+4382:             import pyarrow as pa
      __pyx_t_18 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pyarrow, 0, 0, NULL, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 4382, __pyx_L20_error)
      __pyx_t_8 = __pyx_t_18;
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_v_pa = __pyx_t_8;
      __pyx_t_8 = 0;
+4383:         except ImportError as ie:
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError))));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("questdb._client.QueryResult.to_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_4) < 0) __PYX_ERR(2, 4383, __pyx_L22_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_v_ie = __pyx_t_7;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L31_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_14, &__pyx_t_5);
          if ( unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_14);
          __Pyx_XGOTREF(__pyx_t_5);
          __pyx_t_12 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_ie); __pyx_v_ie = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_XGIVEREF(__pyx_t_5);
          __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_5);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_ErrRestore(__pyx_t_18, __pyx_t_17, __pyx_t_16);
          __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_5 = 0;
          __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_19;
          goto __pyx_L22_except_error;
        }
      }
    }
    goto __pyx_L22_except_error;
+4384:             raise ImportError(
        __pyx_t_10 = NULL;
        __pyx_t_11 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_pyarrow_is_required_for_to_pola};
          __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ImportError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4384, __pyx_L31_error)
          __Pyx_GOTREF(__pyx_t_9);
        }
 4385:                 '`pyarrow` is required for `to_polars()`. '
+4386:                 'Install with `pip install pyarrow`.') from ie
        __Pyx_Raise(__pyx_t_9, 0, 0, __pyx_v_ie);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __PYX_ERR(2, 4384, __pyx_L31_error)
      }
+4387:         handle = self._take_cursor_handle('to_polars()')
  __pyx_t_7 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_11 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_to_polars};
    __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_v_handle = __pyx_t_4;
  __pyx_t_4 = 0;
+4388:         schema, batches = _fetch_all_record_batches(handle, pa)
  if (!(likely(((__pyx_v_handle) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_handle, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4388, __pyx_L1_error)
  __pyx_t_4 = __pyx_f_7questdb_7_client__fetch_all_record_batches(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_v_handle), __pyx_v_pa, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (likely(__pyx_t_4 != Py_None)) {
    PyObject* sequence = __pyx_t_4;
    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(2, 4388, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0);
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1);
    __Pyx_INCREF(__pyx_t_8);
    #else
    __pyx_t_7 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 4388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    #endif
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 4388, __pyx_L1_error)
  }
  __pyx_v_schema = __pyx_t_7;
  __pyx_t_7 = 0;
  __pyx_v_batches = __pyx_t_8;
  __pyx_t_8 = 0;
+4389:         if schema is None:
  __pyx_t_20 = (__pyx_v_schema == Py_None);
  if (__pyx_t_20) {
/* … */
  }
+4390:             return pl.from_arrow(pa.table({}))
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_8 = __pyx_v_pl;
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_9 = __pyx_v_pa;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 4390, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_10};
      __pyx_t_7 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_table, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4390, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_t_11 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_7};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrow, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4390, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
+4391:         table = pa.Table.from_batches(batches, schema)
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 4391, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_7 = __pyx_t_8;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_11 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_v_batches, __pyx_v_schema};
    __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_batches, __pyx_callargs+__pyx_t_11, (3-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4391, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_v_table = __pyx_t_4;
  __pyx_t_4 = 0;
+4392:         if getattr(pl, 'Categories', None) is None:
  __pyx_t_4 = __Pyx_GetAttr3(__pyx_v_pl, __pyx_mstate_global->__pyx_n_u_Categories, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_20 = (__pyx_t_4 == Py_None);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_20) {
/* … */
  }
+4393:             return pl.from_arrow(table)
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_8 = __pyx_v_pl;
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_11 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_table};
      __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_arrow, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
+4394:         try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L39_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L41_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L43_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L42_except_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+4395:             return _polars_dataframe_hybrid(table, pl, pa, {})
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4395, __pyx_L39_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = __pyx_f_7questdb_7_client__polars_dataframe_hybrid(__pyx_v_table, __pyx_v_pl, __pyx_v_pa, ((PyObject*)__pyx_t_4)); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 4395, __pyx_L39_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_r = __pyx_t_8;
      __pyx_t_8 = 0;
      goto __pyx_L43_try_return;
+4396:         except Exception as exc:
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_6) {
      __Pyx_AddTraceback("questdb._client.QueryResult.to_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(2, 4396, __pyx_L41_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_exc = __pyx_t_4;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L50_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_5 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
          if ( unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_14, &__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_5);
          __Pyx_XGOTREF(__pyx_t_14);
          __Pyx_XGOTREF(__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_18);
          __pyx_t_6 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_21 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_5);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_ErrRestore(__pyx_t_5, __pyx_t_14, __pyx_t_15);
          __pyx_t_5 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
          __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_21;
          goto __pyx_L41_except_error;
        }
        __pyx_L49_return: {
          __pyx_t_18 = __pyx_r;
          __pyx_r = 0;
          __Pyx_DECREF(__pyx_v_exc); __pyx_v_exc = 0;
          __pyx_r = __pyx_t_18;
          __pyx_t_18 = 0;
          goto __pyx_L42_except_return;
        }
      }
    }
    goto __pyx_L41_except_error;
+4397:             return _polars_hybrid_fallback(table, pl, exc)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_10 = __pyx_f_7questdb_7_client__polars_hybrid_fallback(__pyx_v_table, __pyx_v_pl, __pyx_v_exc); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 4397, __pyx_L50_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_r = __pyx_t_10;
        __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L49_return;
      }
 4398: 
+4399:     def _to_pandas_numpy(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_17_to_pandas_numpy(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_17_to_pandas_numpy = {"_to_pandas_numpy", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_17_to_pandas_numpy, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_17_to_pandas_numpy(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_to_pandas_numpy (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4399, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4399, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_to_pandas_numpy", 0) < (0)) __PYX_ERR(2, 4399, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_to_pandas_numpy", 1, 1, 1, i); __PYX_ERR(2, 4399, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4399, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_to_pandas_numpy", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4399, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult._to_pandas_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_16_to_pandas_numpy(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_16_to_pandas_numpy(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QueryResult._to_pandas_numpy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_11QueryResult_20generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_17_to_pandas_numpy, 0, __pyx_mstate_global->__pyx_n_u_QueryResult__to_pandas_numpy, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[102])); if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 4399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_to_pandas_numpy, __pyx_t_20) < (0)) __PYX_ERR(2, 4399, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+4400:         return _numpy_frame_from_cursor(
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_2 = __pyx_f_7questdb_7_client__numpy_frame_from_cursor(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4400, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
+4401:             self._take_cursor_handle('to_pandas()'))
  __pyx_t_2 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_to_pandas};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4401, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4401, __pyx_L1_error)
 4402: 
+4403:     def iter_arrow(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_19iter_arrow(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_18iter_arrow, "Iterate result batches as ``pyarrow.RecordBatch``.\n\n        Streaming: a mid-query failover after the first batch has been\n        yielded surfaces ``QuestDBErrorCode.FailoverWouldDuplicate`` (the\n        already-yielded batches cannot be discarded); re-issue the query.\n        If the iterator is abandoned partway, cleanup runs at the next\n        garbage-collection cycle; call :meth:`close` (or use the context-\n        manager) for deterministic release.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_19iter_arrow = {"iter_arrow", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_19iter_arrow, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_18iter_arrow};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_19iter_arrow(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("iter_arrow (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4403, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4403, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "iter_arrow", 0) < (0)) __PYX_ERR(2, 4403, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("iter_arrow", 1, 1, 1, i); __PYX_ERR(2, 4403, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4403, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("iter_arrow", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4403, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.iter_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_18iter_arrow(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_18iter_arrow(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_6_iter_arrow *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_6_iter_arrow *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_6_iter_arrow(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_6_iter_arrow, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_6_iter_arrow *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(2, 4403, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_11QueryResult_20generator2, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[4]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_iter_arrow, __pyx_mstate_global->__pyx_n_u_QueryResult_iter_arrow, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(2, 4403, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.QueryResult.iter_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_7questdb_7_client_11QueryResult_20generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("iter_arrow", 0);
  __pyx_L3_first_run:;
  if (unlikely(__pyx_sent_value != Py_None)) {
    if (unlikely(__pyx_sent_value)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started generator");
    __PYX_ERR(2, 4403, __pyx_L1_error)
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("iter_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_20 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_19iter_arrow, 0, __pyx_mstate_global->__pyx_n_u_QueryResult_iter_arrow, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[4])); if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 4403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_20);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_iter_arrow, __pyx_t_20) < (0)) __PYX_ERR(2, 4403, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_6_iter_arrow {
  PyObject_HEAD
  PyObject *__pyx_v_batch;
  PyObject *__pyx_v_reader;
  PyObject *__pyx_v_self;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};

 4404:         """Iterate result batches as ``pyarrow.RecordBatch``.
 4405: 
 4406:         Streaming: a mid-query failover after the first batch has been
 4407:         yielded surfaces ``QuestDBErrorCode.FailoverWouldDuplicate`` (the
 4408:         already-yielded batches cannot be discarded); re-issue the query.
 4409:         If the iterator is abandoned partway, cleanup runs at the next
 4410:         garbage-collection cycle; call :meth:`close` (or use the context-
 4411:         manager) for deterministic release.
 4412:         """
+4413:         reader = _build_record_batch_reader(
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.compact = 1;
  __pyx_t_2 = __pyx_f_7questdb_7_client__build_record_batch_reader(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1), &__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_reader = __pyx_t_2;
  __pyx_t_2 = 0;
+4414:             self._take_cursor_handle('iter_arrow()'), True)
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_iter_arrow_2};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4414, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4414, __pyx_L1_error)
+4415:         for batch in reader:
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_reader)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_reader)) {
    __pyx_t_2 = __pyx_cur_scope->__pyx_v_reader; __Pyx_INCREF(__pyx_t_2);
    __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_reader); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4415, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4415, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 4415, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_2, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_5;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 4415, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5));
        #else
        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_5);
        #endif
        ++__pyx_t_5;
      }
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4415, __pyx_L1_error)
    } else {
      __pyx_t_1 = __pyx_t_6(__pyx_t_2);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 4415, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_batch);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_batch, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+4416:             yield batch
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_batch);
    __pyx_r = __pyx_cur_scope->__pyx_v_batch;
    __Pyx_XGIVEREF(__pyx_t_2);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_5;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_2);
    __pyx_t_5 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(2, 4416, __pyx_L1_error)
 4417: 
+4418:     def iter_pandas(self, *, dtype_backend=None, types_mapper=None):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_22iter_pandas(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_21iter_pandas, "Iterate result batches as ``pandas.DataFrame``.\n\n        Mirrors :meth:`to_pandas`: with no arguments each batch is\n        materialised straight into numpy (no pyarrow, sentinel-preserving).\n        ``dtype_backend`` / ``types_mapper`` select the pyarrow-backed path\n        instead. Either way every batch carries ``df.attrs['questdb']``,\n        a ``GEOHASH`` column gets the same signed integer type, and what\n        a custom ``types_mapper`` costs the round trip is the same as it\n        is there.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_22iter_pandas = {"iter_pandas", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_22iter_pandas, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_21iter_pandas};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_22iter_pandas(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_dtype_backend = 0;
  PyObject *__pyx_v_types_mapper = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("iter_pandas (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,&__pyx_mstate_global->__pyx_n_u_dtype_backend_2,&__pyx_mstate_global->__pyx_n_u_types_mapper,0};
  PyObject* values[3] = {0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4418, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4418, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "iter_pandas", 0) < (0)) __PYX_ERR(2, 4418, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("iter_pandas", 1, 1, 1, i); __PYX_ERR(2, 4418, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4418, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_self = values[0];
    __pyx_v_dtype_backend = values[1];
    __pyx_v_types_mapper = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("iter_pandas", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4418, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.iter_pandas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_21iter_pandas(__pyx_self, __pyx_v_self, __pyx_v_dtype_backend, __pyx_v_types_mapper);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_21iter_pandas(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_dtype_backend, PyObject *__pyx_v_types_mapper) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client.QueryResult.iter_pandas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_7questdb_7_client_11QueryResult_25generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_t_20 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_20)) __PYX_ERR(2, 4418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_dtype_backend_2, Py_None) < (0)) __PYX_ERR(2, 4418, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_20, __pyx_mstate_global->__pyx_n_u_types_mapper, Py_None) < (0)) __PYX_ERR(2, 4418, __pyx_L1_error)
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_22iter_pandas, 0, __pyx_mstate_global->__pyx_n_u_QueryResult_iter_pandas, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[103])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  __Pyx_CyFunction_SetDefaultsKwDict(__pyx_t_19, __pyx_t_20);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_iter_pandas_2, __pyx_t_19) < (0)) __PYX_ERR(2, 4418, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4419:         """Iterate result batches as ``pandas.DataFrame``.
 4420: 
 4421:         Mirrors :meth:`to_pandas`: with no arguments each batch is
 4422:         materialised straight into numpy (no pyarrow, sentinel-preserving).
 4423:         ``dtype_backend`` / ``types_mapper`` select the pyarrow-backed path
 4424:         instead. Either way every batch carries ``df.attrs['questdb']``,
 4425:         a ``GEOHASH`` column gets the same signed integer type, and what
 4426:         a custom ``types_mapper`` costs the round trip is the same as it
 4427:         is there.
 4428:         """
+4429:         if dtype_backend is not None and types_mapper is not None:
  __pyx_t_2 = (__pyx_v_dtype_backend != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_types_mapper != Py_None);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+4430:             raise ValueError(
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_pass_at_most_one_of_dtype_backen};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4430, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 4430, __pyx_L1_error)
 4431:                 'pass at most one of dtype_backend, types_mapper')
+4432:         if dtype_backend is None and types_mapper is None:
  __pyx_t_2 = (__pyx_v_dtype_backend == Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_types_mapper == Py_None);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+4433:             return _NumpyBatchIter(self._take_cursor_handle('iter_pandas()'))
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = NULL;
    __pyx_t_7 = __pyx_v_self;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_iter_pandas};
      __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4433, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
    }
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__NumpyBatchIter, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4433, __pyx_L1_error)
      __Pyx_GOTREF((PyObject *)__pyx_t_3);
    }
    __pyx_r = ((PyObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;
+4434:         return self._iter_pandas_arrow(dtype_backend, types_mapper)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_v_dtype_backend, __pyx_v_types_mapper};
    __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_iter_pandas_arrow, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4434, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 4435: 
+4436:     def _iter_pandas_arrow(self, dtype_backend, types_mapper):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_24_iter_pandas_arrow(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_24_iter_pandas_arrow = {"_iter_pandas_arrow", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_24_iter_pandas_arrow, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_24_iter_pandas_arrow(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_dtype_backend = 0;
  PyObject *__pyx_v_types_mapper = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_iter_pandas_arrow (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,&__pyx_mstate_global->__pyx_n_u_dtype_backend_2,&__pyx_mstate_global->__pyx_n_u_types_mapper,0};
  PyObject* values[3] = {0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4436, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4436, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4436, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4436, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_iter_pandas_arrow", 0) < (0)) __PYX_ERR(2, 4436, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_iter_pandas_arrow", 1, 3, 3, i); __PYX_ERR(2, 4436, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4436, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4436, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4436, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
    __pyx_v_dtype_backend = values[1];
    __pyx_v_types_mapper = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_iter_pandas_arrow", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 4436, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult._iter_pandas_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_23_iter_pandas_arrow(__pyx_self, __pyx_v_self, __pyx_v_dtype_backend, __pyx_v_types_mapper);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_23_iter_pandas_arrow(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_dtype_backend, PyObject *__pyx_v_types_mapper) {
  struct __pyx_obj_7questdb_7_client___pyx_scope_struct_7__iter_pandas_arrow *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __pyx_cur_scope = (struct __pyx_obj_7questdb_7_client___pyx_scope_struct_7__iter_pandas_arrow *)__pyx_tp_new_7questdb_7_client___pyx_scope_struct_7__iter_pandas_arrow(__pyx_mstate_global->__pyx_ptype_7questdb_7_client___pyx_scope_struct_7__iter_pandas_arrow, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7questdb_7_client___pyx_scope_struct_7__iter_pandas_arrow *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(2, 4436, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_dtype_backend = __pyx_v_dtype_backend;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_dtype_backend);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_dtype_backend);
  __pyx_cur_scope->__pyx_v_types_mapper = __pyx_v_types_mapper;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_types_mapper);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_types_mapper);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7questdb_7_client_11QueryResult_25generator3, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[5]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_iter_pandas_arrow, __pyx_mstate_global->__pyx_n_u_QueryResult__iter_pandas_arrow, __pyx_mstate_global->__pyx_n_u_questdb__client); if (unlikely(!gen)) __PYX_ERR(2, 4436, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("questdb._client.QueryResult._iter_pandas_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_7questdb_7_client_11QueryResult_25generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_iter_pandas_arrow", 0);
  __pyx_L3_first_run:;
  if (unlikely(__pyx_sent_value != Py_None)) {
    if (unlikely(__pyx_sent_value)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started generator");
    __PYX_ERR(2, 4436, __pyx_L1_error)
  }
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("_iter_pandas_arrow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_24_iter_pandas_arrow, 0, __pyx_mstate_global->__pyx_n_u_QueryResult__iter_pandas_arrow, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[5])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_iter_pandas_arrow, __pyx_t_19) < (0)) __PYX_ERR(2, 4436, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
/* … */
struct __pyx_obj_7questdb_7_client___pyx_scope_struct_7__iter_pandas_arrow {
  PyObject_HEAD
  PyObject *__pyx_v_batch;
  PyObject *__pyx_v_claim;
  PyObject *__pyx_v_dtype_backend;
  PyObject *__pyx_v_frame;
  PyObject *__pyx_v_kwargs;
  PyObject *__pyx_v_pa;
  PyObject *__pyx_v_reader;
  PyObject *__pyx_v_self;
  PyObject *__pyx_v_table;
  PyObject *__pyx_v_types_mapper;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};

+4437:         import pyarrow as pa
  __pyx_t_2 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pyarrow, 0, 0, NULL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4437, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_pa = __pyx_t_1;
  __pyx_t_1 = 0;
+4438:         kwargs = _resolve_arrow_to_pandas_kwargs(dtype_backend, types_mapper)
  __pyx_t_1 = __pyx_f_7questdb_7_client__resolve_arrow_to_pandas_kwargs(__pyx_cur_scope->__pyx_v_dtype_backend, __pyx_cur_scope->__pyx_v_types_mapper); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_kwargs = __pyx_t_1;
  __pyx_t_1 = 0;
+4439:         reader = _build_record_batch_reader(
  __pyx_t_3 = __pyx_f_7questdb_7_client__build_record_batch_reader(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_cur_scope->__pyx_v_reader = __pyx_t_3;
  __pyx_t_3 = 0;
+4440:             self._take_cursor_handle('iter_pandas()'))
  __pyx_t_3 = __pyx_cur_scope->__pyx_v_self;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_iter_pandas};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4440, __pyx_L1_error)
 4441:         # `_table_shared_symbol_dict` re-types SYMBOL columns but keeps
 4442:         # every field's name and metadata, which is all the claim reads,
 4443:         # so the stream's own schema gives the same answer for every
 4444:         # batch.
+4445:         claim = _arrow_roundtrip_claim(reader.schema)
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_reader, __pyx_mstate_global->__pyx_n_u_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __pyx_f_7questdb_7_client__arrow_roundtrip_claim(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_claim = __pyx_t_1;
  __pyx_t_1 = 0;
+4446:         for batch in reader:
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_reader)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_reader)) {
    __pyx_t_1 = __pyx_cur_scope->__pyx_v_reader; __Pyx_INCREF(__pyx_t_1);
    __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_reader); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4446, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 4446, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_5;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 4446, __pyx_L1_error)
          #endif
          if (__pyx_t_5 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5));
        #else
        __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_5);
        #endif
        ++__pyx_t_5;
      }
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4446, __pyx_L1_error)
    } else {
      __pyx_t_3 = __pyx_t_6(__pyx_t_1);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 4446, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_batch);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_batch, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+4447:             table = _table_shared_symbol_dict(pa.Table.from_batches([batch]))
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_pa, __pyx_mstate_global->__pyx_n_u_Table); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 4447, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __pyx_t_8;
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4447, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_batch);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_batch);
    if (__Pyx_PyList_SET_ITEM(__pyx_t_9, 0, __pyx_cur_scope->__pyx_v_batch) != (0)) __PYX_ERR(2, 4447, __pyx_L1_error);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_9};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_from_batches, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4447, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_8 = __pyx_f_7questdb_7_client__table_shared_symbol_dict(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 4447, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_table);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_table, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_8);
    __pyx_t_8 = 0;
+4448:             frame = table.to_pandas(**kwargs)
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_table, __pyx_mstate_global->__pyx_n_u_to_pandas_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 4448, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (unlikely(__pyx_cur_scope->__pyx_v_kwargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
      __PYX_ERR(2, 4448, __pyx_L1_error)
    }
    if (likely(PyDict_CheckExact(__pyx_cur_scope->__pyx_v_kwargs))) {
      __pyx_t_3 = PyDict_Copy(__pyx_cur_scope->__pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4448, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    } else {
      __pyx_t_3 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, __pyx_cur_scope->__pyx_v_kwargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4448, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_mstate_global->__pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4448, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_frame);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_frame, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_9);
    __pyx_t_9 = 0;
+4449:             frame.attrs['questdb'] = claim
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_frame, __pyx_mstate_global->__pyx_n_u_attrs); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4449, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (unlikely((PyObject_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_questdb, __pyx_cur_scope->__pyx_v_claim) < 0))) __PYX_ERR(2, 4449, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+4450:             yield frame
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_frame);
    __pyx_r = __pyx_cur_scope->__pyx_v_frame;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_5;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_5 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(2, 4450, __pyx_L1_error)
 4451: 
+4452:     def iter_polars(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_27iter_polars(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_26iter_polars, "Iterate result batches as ``polars.DataFrame``.\n\n        Mirrors :meth:`to_polars` per batch (same ``Categorical`` SYMBOL\n        handling) for streaming / low-peak-memory consumption. Every batch's\n        SYMBOL Categoricals share one persistent ``Categories`` identity, so\n        ``polars.concat`` over the yielded frames stitches without a\n        categories-mismatch error. If the ``Categorical`` fast path fails,\n        it issues one ``RuntimeWarning`` and builds the remaining frames with\n        ``polars.from_arrow``, cast to the same ``Categories``. If that cast\n        fails too, the warning says so: those frames have a plain\n        ``Categorical`` dtype, and ``polars.concat`` with the frames before\n        fails.\n\n        Streaming: a mid-query failover after the first batch has been yielded\n        surfaces ``QuestDBErrorCode.FailoverWouldDuplicate``; re-issue the\n        query. Requires polars and pyarrow.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_27iter_polars = {"iter_polars", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_27iter_polars, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_26iter_polars};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_27iter_polars(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("iter_polars (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4452, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4452, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "iter_polars", 0) < (0)) __PYX_ERR(2, 4452, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("iter_polars", 1, 1, 1, i); __PYX_ERR(2, 4452, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4452, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("iter_polars", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4452, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.iter_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_26iter_polars(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_26iter_polars(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_v_pl = NULL;
  PyObject *__pyx_v_ie = NULL;
  PyObject *__pyx_v_pa = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client.QueryResult.iter_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pl);
  __Pyx_XDECREF(__pyx_v_ie);
  __Pyx_XDECREF(__pyx_v_pa);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_27iter_polars, 0, __pyx_mstate_global->__pyx_n_u_QueryResult_iter_polars, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[104])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_iter_polars_2, __pyx_t_19) < (0)) __PYX_ERR(2, 4452, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4453:         """Iterate result batches as ``polars.DataFrame``.
 4454: 
 4455:         Mirrors :meth:`to_polars` per batch (same ``Categorical`` SYMBOL
 4456:         handling) for streaming / low-peak-memory consumption. Every batch's
 4457:         SYMBOL Categoricals share one persistent ``Categories`` identity, so
 4458:         ``polars.concat`` over the yielded frames stitches without a
 4459:         categories-mismatch error. If the ``Categorical`` fast path fails,
 4460:         it issues one ``RuntimeWarning`` and builds the remaining frames with
 4461:         ``polars.from_arrow``, cast to the same ``Categories``. If that cast
 4462:         fails too, the warning says so: those frames have a plain
 4463:         ``Categorical`` dtype, and ``polars.concat`` with the frames before
 4464:         fails.
 4465: 
 4466:         Streaming: a mid-query failover after the first batch has been yielded
 4467:         surfaces ``QuestDBErrorCode.FailoverWouldDuplicate``; re-issue the
 4468:         query. Requires polars and pyarrow.
 4469:         """
+4470:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+4471:             import polars as pl
      __pyx_t_5 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_polars, 0, 0, NULL, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4471, __pyx_L3_error)
      __pyx_t_4 = __pyx_t_5;
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_pl = __pyx_t_4;
      __pyx_t_4 = 0;
+4472:         except ImportError as ie:
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError))));
    if (__pyx_t_6) {
      __Pyx_AddTraceback("questdb._client.QueryResult.iter_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(2, 4472, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_v_ie = __pyx_t_7;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L14_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_5 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
          if ( unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_14, &__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_5);
          __Pyx_XGOTREF(__pyx_t_14);
          __Pyx_XGOTREF(__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_18);
          __pyx_t_6 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_ie); __pyx_v_ie = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_5);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_ErrRestore(__pyx_t_5, __pyx_t_14, __pyx_t_15);
          __pyx_t_5 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0;
          __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;
+4473:             raise ImportError(
        __pyx_t_10 = NULL;
        __pyx_t_11 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_polars_is_required_for_iter_pol};
          __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ImportError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4473, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_9);
        }
 4474:                 '`polars` is required for `iter_polars()`. '
+4475:                 'Install with `pip install polars`.') from ie
        __Pyx_Raise(__pyx_t_9, 0, 0, __pyx_v_ie);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __PYX_ERR(2, 4473, __pyx_L14_error)
      }
+4476:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L25_try_end;
    __pyx_L20_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
    __pyx_L22_except_error:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
    goto __pyx_L1_error;
    __pyx_L25_try_end:;
  }
+4477:             import pyarrow as pa
      __pyx_t_18 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pyarrow, 0, 0, NULL, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(2, 4477, __pyx_L20_error)
      __pyx_t_8 = __pyx_t_18;
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_v_pa = __pyx_t_8;
      __pyx_t_8 = 0;
+4478:         except ImportError as ie:
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_ImportError))));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("questdb._client.QueryResult.iter_polars", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_4) < 0) __PYX_ERR(2, 4478, __pyx_L22_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_v_ie = __pyx_t_7;
      /*try:*/ {
/* … */
      /*finally:*/ {
        __pyx_L31_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_14, &__pyx_t_5);
          if ( unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_17, &__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_14);
          __Pyx_XGOTREF(__pyx_t_5);
          __pyx_t_12 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_ie); __pyx_v_ie = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_XGIVEREF(__pyx_t_5);
          __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_14, __pyx_t_5);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_ErrRestore(__pyx_t_18, __pyx_t_17, __pyx_t_16);
          __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_16 = 0; __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_5 = 0;
          __pyx_lineno = __pyx_t_12; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_19;
          goto __pyx_L22_except_error;
        }
      }
    }
    goto __pyx_L22_except_error;
+4479:             raise ImportError(
        __pyx_t_10 = NULL;
        __pyx_t_11 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_mstate_global->__pyx_kp_u_pyarrow_is_required_for_iter_po};
          __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ImportError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4479, __pyx_L31_error)
          __Pyx_GOTREF(__pyx_t_9);
        }
 4480:                 '`pyarrow` is required for `iter_polars()`. '
+4481:                 'Install with `pip install pyarrow`.') from ie
        __Pyx_Raise(__pyx_t_9, 0, 0, __pyx_v_ie);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __PYX_ERR(2, 4479, __pyx_L31_error)
      }
+4482:         return _PolarsBatchIter(
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_7 = NULL;
+4483:             self._take_cursor_handle('iter_polars()'), pl, pa)
  __pyx_t_9 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_11 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_iter_polars};
    __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 4483, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
  }
  __pyx_t_11 = 1;
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_7, __pyx_t_8, __pyx_v_pl, __pyx_v_pa};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7questdb_7_client__PolarsBatchIter, __pyx_callargs+__pyx_t_11, (4-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4482, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_4);
  }
  __pyx_r = ((PyObject *)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;
 4484: 
+4485:     def _open_rows(self, str what):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_29_open_rows(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_28_open_rows, "Start (or re-use) this result's row stream.");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_29_open_rows = {"_open_rows", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_29_open_rows, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_28_open_rows};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_29_open_rows(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_what = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_open_rows (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,&__pyx_mstate_global->__pyx_n_u_what,0};
  PyObject* values[2] = {0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4485, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4485, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4485, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_open_rows", 0) < (0)) __PYX_ERR(2, 4485, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_open_rows", 1, 2, 2, i); __PYX_ERR(2, 4485, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4485, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4485, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
    __pyx_v_what = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_open_rows", 1, 2, 2, __pyx_nargs); __PYX_ERR(2, 4485, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult._open_rows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_what), (&PyUnicode_Type), 1, "what", 1))) __PYX_ERR(2, 4485, __pyx_L1_error)
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_28_open_rows(__pyx_self, __pyx_v_self, __pyx_v_what);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_28_open_rows(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_what) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("questdb._client.QueryResult._open_rows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_29_open_rows, 0, __pyx_mstate_global->__pyx_n_u_QueryResult__open_rows, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[105])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4485, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_open_rows, __pyx_t_19) < (0)) __PYX_ERR(2, 4485, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4486:         """Start (or re-use) this result's row stream."""
+4487:         cdef _CursorHandle handle = self._exec_done_handle
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_exec_done_handle); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4487, __pyx_L1_error)
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
+4488:         if self._row_iter is None:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4488, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+4489:             self._row_columns, self._row_iter = _open_row_stream(
    __pyx_t_3 = __pyx_f_7questdb_7_client__open_row_stream(((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4489, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (likely(__pyx_t_3 != Py_None)) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(2, 4489, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1);
      __Pyx_INCREF(__pyx_t_5);
      #else
      __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4489, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4489, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(2, 4489, __pyx_L1_error)
    }
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_columns, __pyx_t_1) < (0)) __PYX_ERR(2, 4489, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_iter, __pyx_t_5) < (0)) __PYX_ERR(2, 4489, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+4490:                 self._take_cursor_handle(what))
    __pyx_t_3 = __pyx_v_self;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_what};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_take_cursor_handle, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4490, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4490, __pyx_L1_error)
+4491:         elif handle._rows_cut_short:
  if (unlikely(__pyx_v_handle->_rows_cut_short)) {
/* … */
  }
  __pyx_L3:;
+4492:             raise QuestDBError(
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4492, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
+4493:                 QuestDBErrorCode.InvalidApiCall,
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4493, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4493, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_4 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
      __pyx_t_4 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_7, __pyx_mstate_global->__pyx_kp_u_QueryResult_row_stream_was_cut_s};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4492, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 4492, __pyx_L1_error)
 4494:                 'QueryResult row stream was cut short by an error or by '
 4495:                 'closing its iterator; re-issue the query')
+4496:         return self._row_iter
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_iter); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4496, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 4497: 
+4498:     def columns(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_31columns(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_30columns, "Column names and QuestDB types as ``[(name, type_name), ...]``.\n\n        ``type_name`` is the QuestDB DDL spelling \342\200\224 ``VARCHAR``,\n        ``TIMESTAMP``, ``TIMESTAMP_NS``, ``SYMBOL``, ``IPv4``,\n        ``GEOHASH(8c)``, ``DECIMAL(18,2)``, ``DOUBLE[]`` \342\200\224 matching\n        ``ColumnType`` on the server, so it can be compared against\n        ``tables()`` / ``information_schema.questdb_columns()`` without\n        normalising. Use ``select ... limit 0`` to read a schema without\n        fetching rows; such a probe is read to its end here, so its\n        connection goes back to the pool.\n\n        Does not consume the rows \342\200\224 :meth:`iter_rows` continues from the\n        same stream \342\200\224 but does consume the result, so it rules out\n        :meth:`to_pandas`, :meth:`to_arrow` and the other materialisation\n        methods. It decodes no rows, is cheap to call repeatedly, and once\n        read still answers after :meth:`close`.\n\n        A result that returned rows is not at its terminal until they have\n        been read, so closing it straight after ``columns()`` drops the\n        connection (and on a :class:`PooledReader` lease makes the lease\n        terminal). Iterate the rows, or call :meth:`cancel` before\n        :meth:`close`, to keep it; a ``LIMIT 0`` probe needs neither.\n\n        Empty for a statement that ships no result set at all (a\n        non-SELECT); see :attr:`exec_done` for that outcome.\n\n        Three limits are the protocol's, not this client's:\n\n        - A ``DECIMAL`` column is reported with its storage width's maximum\n          precision (18, 38 or 76) because the wire carries only the scale:\n          a column declared ``DECIMAL(10,2)`` reads back as\n          ``DECIMAL(18,2)``. Compare on scale when that matters.\n        - A legacy ``STRING`` column is reported as ``VARCHAR``: QWP has no\n          separate STRING column kind.\n        - An array column is reported as ``DOUBLE[]`` / ``LON""G[]`` whatever\n          its dimensionality, because the wire schema carries no dimension\n          count; the server spells a 2-D column ``DOUBLE[][]``.\n\n        .. code-block:: python\n\n            with db.query('select * from trades limit 0') as result:\n                for name, type_name in result.columns():\n                    print(name, type_name)\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_31columns = {"columns", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_31columns, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_30columns};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_31columns(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("columns (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4498, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4498, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "columns", 0) < (0)) __PYX_ERR(2, 4498, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("columns", 1, 1, 1, i); __PYX_ERR(2, 4498, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4498, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("columns", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4498, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.columns", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_30columns(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_30columns(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("questdb._client.QueryResult.columns", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_31columns, 0, __pyx_mstate_global->__pyx_n_u_QueryResult_columns, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[106])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_columns, __pyx_t_19) < (0)) __PYX_ERR(2, 4498, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4499:         """Column names and QuestDB types as ``[(name, type_name), ...]``.
 4500: 
 4501:         ``type_name`` is the QuestDB DDL spelling — ``VARCHAR``,
 4502:         ``TIMESTAMP``, ``TIMESTAMP_NS``, ``SYMBOL``, ``IPv4``,
 4503:         ``GEOHASH(8c)``, ``DECIMAL(18,2)``, ``DOUBLE[]`` — matching
 4504:         ``ColumnType`` on the server, so it can be compared against
 4505:         ``tables()`` / ``information_schema.questdb_columns()`` without
 4506:         normalising. Use ``select ... limit 0`` to read a schema without
 4507:         fetching rows; such a probe is read to its end here, so its
 4508:         connection goes back to the pool.
 4509: 
 4510:         Does not consume the rows — :meth:`iter_rows` continues from the
 4511:         same stream — but does consume the result, so it rules out
 4512:         :meth:`to_pandas`, :meth:`to_arrow` and the other materialisation
 4513:         methods. It decodes no rows, is cheap to call repeatedly, and once
 4514:         read still answers after :meth:`close`.
 4515: 
 4516:         A result that returned rows is not at its terminal until they have
 4517:         been read, so closing it straight after ``columns()`` drops the
 4518:         connection (and on a :class:`PooledReader` lease makes the lease
 4519:         terminal). Iterate the rows, or call :meth:`cancel` before
 4520:         :meth:`close`, to keep it; a ``LIMIT 0`` probe needs neither.
 4521: 
 4522:         Empty for a statement that ships no result set at all (a
 4523:         non-SELECT); see :attr:`exec_done` for that outcome.
 4524: 
 4525:         Three limits are the protocol's, not this client's:
 4526: 
 4527:         - A ``DECIMAL`` column is reported with its storage width's maximum
 4528:           precision (18, 38 or 76) because the wire carries only the scale:
 4529:           a column declared ``DECIMAL(10,2)`` reads back as
 4530:           ``DECIMAL(18,2)``. Compare on scale when that matters.
 4531:         - A legacy ``STRING`` column is reported as ``VARCHAR``: QWP has no
 4532:           separate STRING column kind.
 4533:         - An array column is reported as ``DOUBLE[]`` / ``LONG[]`` whatever
 4534:           its dimensionality, because the wire schema carries no dimension
 4535:           count; the server spells a 2-D column ``DOUBLE[][]``.
 4536: 
 4537:         .. code-block:: python
 4538: 
 4539:             with db.query('select * from trades limit 0') as result:
 4540:                 for name, type_name in result.columns():
 4541:                     print(name, type_name)
 4542:         """
+4543:         if self._row_columns is None:
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_columns); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 == Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+4544:             self._open_rows('columns()')
    __pyx_t_3 = __pyx_v_self;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_columns_2};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_open_rows, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4545:         return list(self._row_columns)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_columns); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PySequence_ListKeepNew(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 4546: 
+4547:     def iter_rows(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_33iter_rows(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_32iter_rows, "Iterate the result as tuples of Python objects.\n\n        For DB-API-shaped callers \342\200\224 a PEP 249 cursor, dbt, plain scripting \342\200\224\n        and for small result sets where exact QuestDB types matter more than\n        throughput: metadata lookups, test rows, ``limit 0`` schema probes.\n        Needs neither ``pyarrow`` nor ``pandas``. Large analytical results\n        belong on :meth:`to_pandas` / :meth:`to_arrow`, which stay columnar;\n        a row of Python objects costs an allocation per cell.\n\n        Streams one batch at a time: the batch being decoded is the only one\n        held in memory. ``None`` marks a SQL NULL in every column.\n\n        Value mapping:\n\n        ========================================  ==========================\n        QuestDB                                   Python\n        ========================================  ==========================\n        ``BOOLEAN``                               ``bool``\n        ``BYTE``, ``SHORT``, ``INT``, ``LONG``    ``int``\n        ``FLOAT``, ``DOUBLE``                     ``float`` (never NaN: the\n                                                  server sends NULL)\n        ``VARCHAR``, ``SYMBOL``                   ``str``\n        ``CHAR``                                  one-character ``str``;\n                                                  code point 0 is ``None``\n        ``TIMESTAMP``                             ``datetime`` (UTC-aware,\n                                                  microseconds)\n        ``TIMESTAMP_NS``                          ``datetime`` (UTC-aware),\n                                                  rounded down to\n                                                  microseconds\n        ``DATE``                                  ``datetime`` (UTC-aware,\n                                                  milliseconds)\n        ``UUID``                                  ``uuid.UUID``\n        ``LONG256``                               ``int``"" (unsigned)\n        ``DECIMAL(p,s)``                          ``decimal.Decimal``\n                                                  (scale preserved)\n        ``GEOHASH(nc)``                           ``str`` (base-32, or\n                                                  '0'/'1' bits when n is\n                                                  not a multiple of 5)\n        ``IPv4``                                  ``ipaddress.IPv4Address``\n        ``BINARY``                                ``bytes``\n        ``DOUBLE[]``                              ``numpy.ndarray``\n        ========================================  ==========================\n\n        Datetimes are timezone-aware UTC, matching what\n        :meth:`to_arrow` labels them. ``TIMESTAMP_NS`` is rounded down\n        (towards the past) because ``datetime`` has no nanosecond field; use\n        :meth:`to_pandas` or :meth:`to_arrow` for full precision. A temporal\n        value outside ``datetime``'s years 1..9999 raises\n        ``QuestDBErrorCode.InvalidTimestamp`` naming the column. Like any\n        other error raised while decoding, it closes the result before its\n        terminal, so the connection is dropped (on a :class:`PooledReader`\n        lease, the lease becomes terminal). A server-side error \342\200\224 a parse\n        error, a timeout \342\200\224 ends at a terminal frame instead and keeps the\n        connection. A ``CHAR`` holding a UTF-16 surrogate code unit comes\n        back as that lone surrogate, which cannot be encoded to UTF-8.\n        ``LONG[]`` columns are not supported on this path.\n\n        Every call returns the same iterator, so :meth:`columns` and\n        ``iter_rows()`` share one stream and an exhausted iterator stays\n        empty. The batch being handed out is the only one held in memory.\n        After :meth:`cancel` no further rows are yielded, including any\n        already decoded; after :meth:`close` the iterator raises. A fresh\n        ``iter_rows()``"" call raises too once the stream ended with an error\n        or its iterator was closed. A mid-query failover after iteration\n        has begun raises\n        ``QuestDBErrorCode.FailoverWouldDuplicate`` rather than replaying\n        rows the caller already holds.\n\n        .. code-block:: python\n\n            with db.query('select ts, symbol from trades limit 3') as result:\n                for ts, symbol in result.iter_rows():\n                    print(ts, symbol)\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_33iter_rows = {"iter_rows", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_33iter_rows, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_32iter_rows};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_33iter_rows(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("iter_rows (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4547, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4547, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "iter_rows", 0) < (0)) __PYX_ERR(2, 4547, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("iter_rows", 1, 1, 1, i); __PYX_ERR(2, 4547, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4547, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("iter_rows", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4547, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.iter_rows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_32iter_rows(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_32iter_rows(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QueryResult.iter_rows", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_33iter_rows, 0, __pyx_mstate_global->__pyx_n_u_QueryResult_iter_rows, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[107])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4547, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_iter_rows_2, __pyx_t_19) < (0)) __PYX_ERR(2, 4547, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4548:         """Iterate the result as tuples of Python objects.
 4549: 
 4550:         For DB-API-shaped callers — a PEP 249 cursor, dbt, plain scripting —
 4551:         and for small result sets where exact QuestDB types matter more than
 4552:         throughput: metadata lookups, test rows, ``limit 0`` schema probes.
 4553:         Needs neither ``pyarrow`` nor ``pandas``. Large analytical results
 4554:         belong on :meth:`to_pandas` / :meth:`to_arrow`, which stay columnar;
 4555:         a row of Python objects costs an allocation per cell.
 4556: 
 4557:         Streams one batch at a time: the batch being decoded is the only one
 4558:         held in memory. ``None`` marks a SQL NULL in every column.
 4559: 
 4560:         Value mapping:
 4561: 
 4562:         ========================================  ==========================
 4563:         QuestDB                                   Python
 4564:         ========================================  ==========================
 4565:         ``BOOLEAN``                               ``bool``
 4566:         ``BYTE``, ``SHORT``, ``INT``, ``LONG``    ``int``
 4567:         ``FLOAT``, ``DOUBLE``                     ``float`` (never NaN: the
 4568:                                                   server sends NULL)
 4569:         ``VARCHAR``, ``SYMBOL``                   ``str``
 4570:         ``CHAR``                                  one-character ``str``;
 4571:                                                   code point 0 is ``None``
 4572:         ``TIMESTAMP``                             ``datetime`` (UTC-aware,
 4573:                                                   microseconds)
 4574:         ``TIMESTAMP_NS``                          ``datetime`` (UTC-aware),
 4575:                                                   rounded down to
 4576:                                                   microseconds
 4577:         ``DATE``                                  ``datetime`` (UTC-aware,
 4578:                                                   milliseconds)
 4579:         ``UUID``                                  ``uuid.UUID``
 4580:         ``LONG256``                               ``int`` (unsigned)
 4581:         ``DECIMAL(p,s)``                          ``decimal.Decimal``
 4582:                                                   (scale preserved)
 4583:         ``GEOHASH(nc)``                           ``str`` (base-32, or
 4584:                                                   '0'/'1' bits when n is
 4585:                                                   not a multiple of 5)
 4586:         ``IPv4``                                  ``ipaddress.IPv4Address``
 4587:         ``BINARY``                                ``bytes``
 4588:         ``DOUBLE[]``                              ``numpy.ndarray``
 4589:         ========================================  ==========================
 4590: 
 4591:         Datetimes are timezone-aware UTC, matching what
 4592:         :meth:`to_arrow` labels them. ``TIMESTAMP_NS`` is rounded down
 4593:         (towards the past) because ``datetime`` has no nanosecond field; use
 4594:         :meth:`to_pandas` or :meth:`to_arrow` for full precision. A temporal
 4595:         value outside ``datetime``'s years 1..9999 raises
 4596:         ``QuestDBErrorCode.InvalidTimestamp`` naming the column. Like any
 4597:         other error raised while decoding, it closes the result before its
 4598:         terminal, so the connection is dropped (on a :class:`PooledReader`
 4599:         lease, the lease becomes terminal). A server-side error — a parse
 4600:         error, a timeout — ends at a terminal frame instead and keeps the
 4601:         connection. A ``CHAR`` holding a UTF-16 surrogate code unit comes
 4602:         back as that lone surrogate, which cannot be encoded to UTF-8.
 4603:         ``LONG[]`` columns are not supported on this path.
 4604: 
 4605:         Every call returns the same iterator, so :meth:`columns` and
 4606:         ``iter_rows()`` share one stream and an exhausted iterator stays
 4607:         empty. The batch being handed out is the only one held in memory.
 4608:         After :meth:`cancel` no further rows are yielded, including any
 4609:         already decoded; after :meth:`close` the iterator raises. A fresh
 4610:         ``iter_rows()`` call raises too once the stream ended with an error
 4611:         or its iterator was closed. A mid-query failover after iteration
 4612:         has begun raises
 4613:         ``QuestDBErrorCode.FailoverWouldDuplicate`` rather than replaying
 4614:         rows the caller already holds.
 4615: 
 4616:         .. code-block:: python
 4617: 
 4618:             with db.query('select ts, symbol from trades limit 3') as result:
 4619:                 for ts, symbol in result.iter_rows():
 4620:                     print(ts, symbol)
 4621:         """
+4622:         return self._open_rows('iter_rows()')
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_iter_rows};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_open_rows, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4622, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4623: 
+4624:     @property
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_35exec_done(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_34exec_done, "The statement's terminal ``EXEC_DONE`` report, or ``None``.\n\n        An :class:`ExecDone` ``(op_type, rows_affected)`` once a non-SELECT\n        has been drained to its clean end; ``None`` before that, and\n        ``None`` for a statement that streamed a result set instead (a\n        ``SELECT`` ends with ``END``, which carries no counts).\n\n        ``rows_affected`` is meaningful for ``INSERT`` and ``UPDATE``, and\n        ``0`` for a statement that carries no count \342\200\224 one executed at parse\n        time (``TRUNCATE``, ``RENAME TABLE``, ``SET``,\n        ``ALTER TABLE ... RESUME WAL``, ...). ``op_type`` is\n        the server's QWP operation-type byte, carried through as an opaque\n        ``int``: its values are the server's, not part of this client's\n        API. Still available after :meth:`close`.\n\n        .. code-block:: python\n\n            with db.query('insert into t values (1)') as result:\n                list(result.iter_rows())    # drains it\n            print(result.exec_done.rows_affected)\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_35exec_done = {"exec_done", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_35exec_done, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_34exec_done};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_35exec_done(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("exec_done (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4624, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4624, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "exec_done", 0) < (0)) __PYX_ERR(2, 4624, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("exec_done", 1, 1, 1, i); __PYX_ERR(2, 4624, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4624, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("exec_done", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4624, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.exec_done", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_34exec_done(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_34exec_done(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("questdb._client.QueryResult.exec_done", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_20 = NULL;
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_35exec_done, 0, __pyx_mstate_global->__pyx_n_u_QueryResult_exec_done, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[108])); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_20, __pyx_t_4};
    __pyx_t_19 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_property, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4624, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
  }
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_exec_done, __pyx_t_19) < (0)) __PYX_ERR(2, 4624, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4625:     def exec_done(self):
 4626:         """The statement's terminal ``EXEC_DONE`` report, or ``None``.
 4627: 
 4628:         An :class:`ExecDone` ``(op_type, rows_affected)`` once a non-SELECT
 4629:         has been drained to its clean end; ``None`` before that, and
 4630:         ``None`` for a statement that streamed a result set instead (a
 4631:         ``SELECT`` ends with ``END``, which carries no counts).
 4632: 
 4633:         ``rows_affected`` is meaningful for ``INSERT`` and ``UPDATE``, and
 4634:         ``0`` for a statement that carries no count — one executed at parse
 4635:         time (``TRUNCATE``, ``RENAME TABLE``, ``SET``,
 4636:         ``ALTER TABLE ... RESUME WAL``, ...). ``op_type`` is
 4637:         the server's QWP operation-type byte, carried through as an opaque
 4638:         ``int``: its values are the server's, not part of this client's
 4639:         API. Still available after :meth:`close`.
 4640: 
 4641:         .. code-block:: python
 4642: 
 4643:             with db.query('insert into t values (1)') as result:
 4644:                 list(result.iter_rows())    # drains it
 4645:             print(result.exec_done.rows_affected)
 4646:         """
+4647:         cdef _CursorHandle handle = self._exec_done_handle
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_exec_done_handle); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4647, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4647, __pyx_L1_error)
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
+4648:         if handle is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_handle) == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+4649:             return None
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+4650:         with handle._lock:
  /*with:*/ {
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 4650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4650, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_6 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4650, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client.QueryResult.exec_done", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_12) < 0) __PYX_ERR(2, 4650, __pyx_L10_except_error)
          __Pyx_XGOTREF(__pyx_t_1);
          __Pyx_XGOTREF(__pyx_t_4);
          __Pyx_XGOTREF(__pyx_t_12);
          __pyx_t_10 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_4, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 4650, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_10, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 4650, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (__pyx_t_2 < (0)) __PYX_ERR(2, 4650, __pyx_L10_except_error)
          __pyx_t_15 = (!__pyx_t_2);
          if (unlikely(__pyx_t_15)) {
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_XGIVEREF(__pyx_t_12);
            __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_4, __pyx_t_12);
            __pyx_t_1 = 0;  __pyx_t_4 = 0;  __pyx_t_12 = 0; 
            __PYX_ERR(2, 4650, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L1_error;
        __pyx_L12_try_return:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L5_return;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_3) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4650, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L5_return: {
        __pyx_t_9 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_3) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 4650, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __pyx_r = __pyx_t_9;
        __pyx_t_9 = 0;
        goto __pyx_L0;
      }
      __pyx_L7:;
    }
    goto __pyx_L18;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L1_error;
    __pyx_L18:;
  }
+4651:             if not handle._exec_done_valid:
          __pyx_t_2 = (!__pyx_v_handle->_exec_done_valid);
          if (__pyx_t_2) {
/* … */
          }
+4652:                 return None
            __Pyx_XDECREF(__pyx_r);
            __pyx_r = Py_None; __Pyx_INCREF(Py_None);
            goto __pyx_L12_try_return;
+4653:             return ExecDone(
          __Pyx_XDECREF(__pyx_r);
          __pyx_t_5 = NULL;
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_ExecDone); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4653, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_4);
+4654:                 int(handle._exec_done_op_type),
          __pyx_t_11 = NULL;
          __pyx_t_12 = __Pyx_PyLong_From_uint8_t(__pyx_v_handle->_exec_done_op_type); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 4654, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_6 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_12};
            __pyx_t_10 = __Pyx_PyObject_FastCall((PyObject*)(&PyLong_Type), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 4654, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_10);
          }
+4655:                 int(handle._exec_done_rows))
          __pyx_t_11 = NULL;
          __pyx_t_13 = __Pyx_PyLong_From_uint64_t(__pyx_v_handle->_exec_done_rows); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 4655, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_6 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_11, __pyx_t_13};
            __pyx_t_12 = __Pyx_PyObject_FastCall((PyObject*)(&PyLong_Type), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 4655, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_12);
          }
          __pyx_t_6 = 1;
          #if CYTHON_UNPACK_METHODS
          if (unlikely(PyMethod_Check(__pyx_t_4))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
            assert(__pyx_t_5);
            PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(__pyx__function);
            __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
            __pyx_t_6 = 0;
          }
          #endif
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_10, __pyx_t_12};
            __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (3-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4653, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __pyx_r = __pyx_t_1;
          __pyx_t_1 = 0;
          goto __pyx_L12_try_return;
 4656: 
+4657:     def cancel(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_37cancel(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_36cancel, "Cancel the query and drain to terminal.\n\n        The result remains open; call :meth:`close` before starting\n        another query on the same reader. On failure, the result is\n        closed. Idempotent after success. Rows already decoded but not\n        yet handed out by :meth:`iter_rows` are not yielded afterwards, and\n        a result not yet read cannot be read afterwards: :meth:`columns`,\n        :meth:`iter_rows` and the materialisation methods raise\n        ``QuestDBErrorCode.InvalidApiCall``.\n\n        Cancel between rows, not from a signal handler that interrupts a\n        batch being decoded on the same thread: that call is refused with\n        ``QuestDBErrorCode.InvalidApiCall``, because it would invalidate\n        the batch under the decoder.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_37cancel = {"cancel", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_37cancel, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_36cancel};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_37cancel(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cancel (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4657, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4657, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "cancel", 0) < (0)) __PYX_ERR(2, 4657, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("cancel", 1, 1, 1, i); __PYX_ERR(2, 4657, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4657, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("cancel", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4657, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_36cancel(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_36cancel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  questdb_error *__pyx_v_err;
  int __pyx_v_ok;
  int __pyx_v_reusable;
  struct qwp_reader_cursor *__pyx_v_cursor;
  PyObject *__pyx_v_exc = 0;
  PyObject *__pyx_v_mark_exc = NULL;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("questdb._client.QueryResult.cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_XDECREF(__pyx_v_mark_exc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_37cancel, 0, __pyx_mstate_global->__pyx_n_u_QueryResult_cancel, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[109])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_cancel, __pyx_t_19) < (0)) __PYX_ERR(2, 4657, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4658:         """Cancel the query and drain to terminal.
 4659: 
 4660:         The result remains open; call :meth:`close` before starting
 4661:         another query on the same reader. On failure, the result is
 4662:         closed. Idempotent after success. Rows already decoded but not
 4663:         yet handed out by :meth:`iter_rows` are not yielded afterwards, and
 4664:         a result not yet read cannot be read afterwards: :meth:`columns`,
 4665:         :meth:`iter_rows` and the materialisation methods raise
 4666:         ``QuestDBErrorCode.InvalidApiCall``.
 4667: 
 4668:         Cancel between rows, not from a signal handler that interrupts a
 4669:         batch being decoded on the same thread: that call is refused with
 4670:         ``QuestDBErrorCode.InvalidApiCall``, because it would invalidate
 4671:         the batch under the decoder.
 4672:         """
+4673:         cdef _CursorHandle handle = self._cancel_handle
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cancel_handle); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4673, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4673, __pyx_L1_error)
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
+4674:         cdef questdb_error* err = NULL
  __pyx_v_err = NULL;
 4675:         cdef bint ok
 4676:         cdef bint reusable
 4677:         cdef qwp_reader_cursor* cursor
+4678:         cdef object exc = None
  __Pyx_INCREF(Py_None);
  __pyx_v_exc = Py_None;
 4679:         # Without a handle there is no pending `__arrow_c_schema__` producer:
 4680:         # close() drops it when it detaches the handle.
+4681:         if handle is None:
  __pyx_t_2 = (((PyObject *)__pyx_v_handle) == Py_None);
  if (__pyx_t_2) {
/* … */
  }
+4682:             return
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
+4683:         handle._check_not_driving('cancel', check_lock=True)
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.check_lock = 1;
  __pyx_t_3 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_check_not_driving(__pyx_v_handle, __pyx_mstate_global->__pyx_n_u_cancel, &__pyx_t_4); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 4683, __pyx_L1_error)
+4684:         with handle._lock:
  /*with:*/ {
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 4684, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_v_handle->_lock, __pyx_mstate_global->__pyx_n_u_enter); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4684, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = 1;
    #if CYTHON_UNPACK_METHODS
    if (likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_8 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4684, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("questdb._client.QueryResult.cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_13) < 0) __PYX_ERR(2, 4684, __pyx_L10_except_error)
          __Pyx_XGOTREF(__pyx_t_1);
          __Pyx_XGOTREF(__pyx_t_6);
          __Pyx_XGOTREF(__pyx_t_13);
          __pyx_t_7 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_6, __pyx_t_13); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4684, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(2, 4684, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (__pyx_t_2 < (0)) __PYX_ERR(2, 4684, __pyx_L10_except_error)
          __pyx_t_16 = (!__pyx_t_2);
          if (unlikely(__pyx_t_16)) {
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_6);
            __Pyx_XGIVEREF(__pyx_t_13);
            __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_6, __pyx_t_13);
            __pyx_t_1 = 0;  __pyx_t_6 = 0;  __pyx_t_13 = 0; 
            __PYX_ERR(2, 4684, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        goto __pyx_L1_error;
        __pyx_L12_try_return:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        goto __pyx_L5_return;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_5) {
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 4684, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L5_return: {
        __pyx_t_11 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_5) {
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[3], NULL);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 4684, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        __pyx_r = __pyx_t_11;
        __pyx_t_11 = 0;
        goto __pyx_L0;
      }
      __pyx_L7:;
    }
    goto __pyx_L25;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L1_error;
    __pyx_L25:;
  }
+4685:             handle._check_not_driving('cancel')
          __pyx_t_3 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_check_not_driving(__pyx_v_handle, __pyx_mstate_global->__pyx_n_u_cancel, NULL); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 4685, __pyx_L8_error)
+4686:             if handle._pinned > 0:
          __pyx_t_2 = (__pyx_v_handle->_pinned > 0);
          if (unlikely(__pyx_t_2)) {
/* … */
          }
 4687:                 # Same-thread re-entry (a signal handler) while a decoder
 4688:                 # holds pointers into the current batch: cancelling would
 4689:                 # drop that batch under it.
+4690:                 raise QuestDBError(
            __pyx_t_7 = NULL;
            __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4690, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_6);
+4691:                     QuestDBErrorCode.InvalidApiCall,
            __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 4691, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_mstate_global->__pyx_n_u_InvalidApiCall); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 4691, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_t_8 = 1;
            #if CYTHON_UNPACK_METHODS
            if (unlikely(PyMethod_Check(__pyx_t_6))) {
              __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
              assert(__pyx_t_7);
              PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
              __Pyx_INCREF(__pyx_t_7);
              __Pyx_INCREF(__pyx__function);
              __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
              __pyx_t_8 = 0;
            }
            #endif
            {
              PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_13, __pyx_mstate_global->__pyx_kp_u_cancel_called_while_this_result};
              __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
              __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
              __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
              if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4690, __pyx_L8_error)
              __Pyx_GOTREF(__pyx_t_1);
            }
            __Pyx_Raise(__pyx_t_1, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __PYX_ERR(2, 4690, __pyx_L8_error)
 4692:                     'cancel() called while this result is being decoded '
 4693:                     'on the same thread; cancel it between rows instead')
 4694:             # A pending `__arrow_c_schema__` producer holds the first batch. A
 4695:             # stream after the cancel would give that batch and then a clean
 4696:             # end: a truncated result without an error. Drop it, once the
 4697:             # cancel can no longer be refused.
+4698:             self._drop_schema_producer()
          __pyx_t_6 = __pyx_v_self;
          __Pyx_INCREF(__pyx_t_6);
          __pyx_t_8 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
            __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_drop_schema_producer, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4698, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4699:             cursor = handle._cursor
          __pyx_t_14 = __pyx_v_handle->_cursor;
          __pyx_v_cursor = __pyx_t_14;
+4700:             if cursor == NULL:
          __pyx_t_2 = (__pyx_v_cursor == NULL);
          if (__pyx_t_2) {
/* … */
          }
+4701:                 return
            __Pyx_XDECREF(__pyx_r);
            __pyx_r = Py_None; __Pyx_INCREF(Py_None);
            goto __pyx_L12_try_return;
+4702:             handle._pending_batch = NULL
          __pyx_v_handle->_pending_batch = NULL;
+4703:             handle._native_in_flight = True
          __pyx_v_handle->_native_in_flight = 1;
+4704:             handle._pin()
          ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_pin(__pyx_v_handle);
+4705:             try:
          /*try:*/ {
+4706:                 with nogil:
            {
                PyThreadState * _save;
                _save = PyEval_SaveThread();
                __Pyx_FastGIL_Remember();
                /*try:*/ {
/* … */
                /*finally:*/ {
                  /*normal exit:*/{
                    __Pyx_FastGIL_Forget();
                    PyEval_RestoreThread(_save);
                    goto __pyx_L21;
                  }
                  __pyx_L21:;
                }
            }
+4707:                     ok = qwp_reader_cursor_cancel(cursor, &err)
                  __pyx_v_ok = qwp_reader_cursor_cancel(__pyx_v_cursor, (&__pyx_v_err));
+4708:                     reusable = qwp_reader_cursor_connection_reusable(cursor)
                  __pyx_v_reusable = qwp_reader_cursor_connection_reusable(__pyx_v_cursor);
                }
 4709:                 # Rows decoded ahead of the consumer stop flowing from here.
+4710:                 handle._cancelled = True
            __pyx_v_handle->_cancelled = 1;
          }
 4711:             finally:
 4712:                 # Cleared before `_unpin`, which may run a deferred free.
+4713:                 handle._native_in_flight = False
          /*finally:*/ {
            /*normal exit:*/{
              __pyx_v_handle->_native_in_flight = 0;
+4714:                 handle._unpin()
              ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_unpin(__pyx_v_handle);
              goto __pyx_L18;
            }
            __pyx_L18:;
          }
+4715:         if not ok:
  __pyx_t_16 = (!__pyx_v_ok);
  if (__pyx_t_16) {
/* … */
  }
+4716:             if err != NULL:
    __pyx_t_16 = (__pyx_v_err != NULL);
    if (__pyx_t_16) {
/* … */
      goto __pyx_L27;
    }
+4717:                 exc = _reader_err_to_py(err)
      __pyx_t_13 = __pyx_f_7questdb_7_client__reader_err_to_py(__pyx_v_err); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 4717, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF_SET(__pyx_v_exc, __pyx_t_13);
      __pyx_t_13 = 0;
+4718:                 err = NULL
      __pyx_v_err = NULL;
 4719:             else:
+4720:                 exc = QuestDBError(
    /*else*/ {
      __pyx_t_6 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_QuestDBError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
+4721:                     QuestDBErrorCode.ServerFlushError,
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_QuestDBErrorCode); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 4721, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ServerFlushError); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 4721, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
        assert(__pyx_t_6);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_1, __pyx__function);
        __pyx_t_8 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_12, __pyx_mstate_global->__pyx_kp_u_qwp_reader_cursor_cancel_returne};
        __pyx_t_13 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_1, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 4720, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
      }
      __Pyx_DECREF_SET(__pyx_v_exc, __pyx_t_13);
      __pyx_t_13 = 0;
    }
    __pyx_L27:;
 4722:                     'qwp_reader_cursor_cancel returned false '
 4723:                     'without setting err_out')
+4724:         if reusable:
  if (__pyx_v_reusable) {
/* … */
  }
+4725:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      goto __pyx_L34_try_end;
      __pyx_L29_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
      __pyx_L31_except_error:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_11, __pyx_t_10);
      goto __pyx_L1_error;
      __pyx_L34_try_end:;
    }
+4726:                 _mark_reader_drained(handle)
        __pyx_t_3 = __pyx_f_7questdb_7_client__mark_reader_drained(__pyx_v_handle); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 4726, __pyx_L29_error)
+4727:             except BaseException as mark_exc:
      __pyx_t_17 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_BaseException))));
      if (__pyx_t_17) {
        __Pyx_AddTraceback("questdb._client.QueryResult.cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_13, &__pyx_t_1, &__pyx_t_12) < 0) __PYX_ERR(2, 4727, __pyx_L31_except_error)
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_v_mark_exc = __pyx_t_1;
        /*try:*/ {
/* … */
        /*finally:*/ {
          __pyx_L40_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_9 = 0; __pyx_t_15 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
            if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_15, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_15, &__pyx_t_20);
            __Pyx_XGOTREF(__pyx_t_9);
            __Pyx_XGOTREF(__pyx_t_15);
            __Pyx_XGOTREF(__pyx_t_20);
            __Pyx_XGOTREF(__pyx_t_21);
            __Pyx_XGOTREF(__pyx_t_22);
            __Pyx_XGOTREF(__pyx_t_23);
            __pyx_t_17 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_mark_exc); __pyx_v_mark_exc = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_9);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_ErrRestore(__pyx_t_9, __pyx_t_15, __pyx_t_20);
            __pyx_t_9 = 0; __pyx_t_15 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0;
            __pyx_lineno = __pyx_t_17; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
            goto __pyx_L31_except_error;
          }
        }
      }
      goto __pyx_L31_except_error;
+4728:                 self.close()
          __pyx_t_7 = __pyx_v_self;
          __Pyx_INCREF(__pyx_t_7);
          __pyx_t_8 = 0;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
            __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 4728, __pyx_L40_error)
            __Pyx_GOTREF(__pyx_t_6);
          }
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+4729:                 if exc is not None:
          __pyx_t_16 = (__pyx_v_exc != Py_None);
          if (unlikely(__pyx_t_16)) {
/* … */
          }
+4730:                     raise exc from mark_exc
            __Pyx_Raise(__pyx_v_exc, 0, 0, __pyx_v_mark_exc);
            __PYX_ERR(2, 4730, __pyx_L40_error)
+4731:                 raise
          __Pyx_GIVEREF(__pyx_t_13);
          __Pyx_GIVEREF(__pyx_t_1);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_ErrRestoreWithState(__pyx_t_13, __pyx_t_1, __pyx_t_12);
          __pyx_t_13 = 0;  __pyx_t_1 = 0;  __pyx_t_12 = 0; 
          __PYX_ERR(2, 4731, __pyx_L40_error)
        }
+4732:         if exc is not None:
  __pyx_t_16 = (__pyx_v_exc != Py_None);
  if (unlikely(__pyx_t_16)) {
/* … */
  }
+4733:             self.close()
    __pyx_t_1 = __pyx_v_self;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_8 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, NULL};
      __pyx_t_12 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 4733, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
    }
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+4734:             raise exc
    __Pyx_Raise(__pyx_v_exc, 0, 0, 0);
    __PYX_ERR(2, 4734, __pyx_L1_error)
 4735: 
+4736:     def close(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_39close(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_7questdb_7_client_11QueryResult_38close, "Release the cursor and reader. Idempotent.\n\n        Terminal connections return to the pool; others are dropped.\n        This does not cancel the query. Outstanding iterators become\n        invalid.\n        ");
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_39close = {"close", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_39close, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7questdb_7_client_11QueryResult_38close};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_39close(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("close (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4736, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4736, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "close", 0) < (0)) __PYX_ERR(2, 4736, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("close", 1, 1, 1, i); __PYX_ERR(2, 4736, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4736, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("close", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4736, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_38close(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_38close(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("questdb._client.QueryResult.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_39close, 0, __pyx_mstate_global->__pyx_n_u_QueryResult_close, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[110])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_close, __pyx_t_19) < (0)) __PYX_ERR(2, 4736, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4737:         """Release the cursor and reader. Idempotent.
 4738: 
 4739:         Terminal connections return to the pool; others are dropped.
 4740:         This does not cancel the query. Outstanding iterators become
 4741:         invalid.
 4742:         """
+4743:         cdef _CursorHandle handle = self._cancel_handle
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cancel_handle); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4743, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4743, __pyx_L1_error)
  __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_1);
  __pyx_t_1 = 0;
+4744:         if handle is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
 4745:             # A native next_batch/next_arrow_batch may still borrow this cursor
 4746:             # when Python code runs on this thread mid-operation (a finalizer,
 4747:             # say). Reject re-entry before detaching the only public references.
+4748:             handle._check_not_driving('close', check_lock=True)
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.check_lock = 1;
    __pyx_t_3 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_check_not_driving(__pyx_v_handle, __pyx_mstate_global->__pyx_n_u_close, &__pyx_t_4); if (unlikely(__pyx_t_3 == ((__pyx_t_7questdb_7_client_void_int)-1))) __PYX_ERR(2, 4748, __pyx_L1_error)
+4749:         self._drop_schema_producer()
  __pyx_t_5 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_6 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_drop_schema_producer, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4749, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4750:         self._cursor_handle = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cursor_handle_2, Py_None) < (0)) __PYX_ERR(2, 4750, __pyx_L1_error)
+4751:         self._consumed = True
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed, Py_True) < (0)) __PYX_ERR(2, 4751, __pyx_L1_error)
 4752:         # Let go of a suspended row stream so its buffered batch can be
 4753:         # collected; a caller still holding the iterator sees 'cursor is
 4754:         # closed' on its next step. The column list stays answerable.
+4755:         self._row_iter = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_row_iter, Py_None) < (0)) __PYX_ERR(2, 4755, __pyx_L1_error)
+4756:         if handle is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_handle) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
 4757:             # Waits for another thread's call on the cursor to return. If
 4758:             # that wait is interrupted, the call frees the cursor instead.
+4759:             handle._close()
    __pyx_t_7 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_close(__pyx_v_handle); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(2, 4759, __pyx_L1_error)
+4760:         self._cancel_handle = None
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cancel_handle, Py_None) < (0)) __PYX_ERR(2, 4760, __pyx_L1_error)
 4761: 
+4762:     def _drop_schema_producer(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_41_drop_schema_producer(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_41_drop_schema_producer = {"_drop_schema_producer", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_41_drop_schema_producer, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_41_drop_schema_producer(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_drop_schema_producer (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4762, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4762, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_drop_schema_producer", 0) < (0)) __PYX_ERR(2, 4762, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_drop_schema_producer", 1, 1, 1, i); __PYX_ERR(2, 4762, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4762, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_drop_schema_producer", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4762, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult._drop_schema_producer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_40_drop_schema_producer(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_40_drop_schema_producer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod = 0;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("questdb._client.QueryResult._drop_schema_producer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_prod);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_41_drop_schema_producer, 0, __pyx_mstate_global->__pyx_n_u_QueryResult__drop_schema_produce, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[111])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4762, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_drop_schema_producer, __pyx_t_19) < (0)) __PYX_ERR(2, 4762, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+4763:         cdef _QueryStreamProducer prod = self._schema_producer
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_producer); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4763, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__QueryStreamProducer))))) __PYX_ERR(2, 4763, __pyx_L1_error)
  __pyx_v_prod = ((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_t_1);
  __pyx_t_1 = 0;
+4764:         if prod is not None:
  __pyx_t_2 = (((PyObject *)__pyx_v_prod) != Py_None);
  if (__pyx_t_2) {
/* … */
  }
 4765:             # Nothing outside this result has the producer yet, and nothing
 4766:             # was read: a later read says "closed", not "read by". Drop
 4767:             # the saved schema too, so that a schema read and a stream
 4768:             # read agree. After a stream was taken, keep it.
+4769:             self._schema_producer = None
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_producer, Py_None) < (0)) __PYX_ERR(2, 4769, __pyx_L1_error)
+4770:             self._schema_box = None
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_box, Py_None) < (0)) __PYX_ERR(2, 4770, __pyx_L1_error)
+4771:             self._consumed_by = None
    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed_by, Py_None) < (0)) __PYX_ERR(2, 4771, __pyx_L1_error)
+4772:             prod._free_cached()
    ((struct __pyx_vtabstruct_7questdb_7_client__QueryStreamProducer *)__pyx_v_prod->__pyx_vtab)->_free_cached(__pyx_v_prod);
 4773: 
+4774:     def __enter__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_43__enter__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_43__enter__ = {"__enter__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_43__enter__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_43__enter__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__enter__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4774, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4774, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__enter__", 0) < (0)) __PYX_ERR(2, 4774, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__enter__", 1, 1, 1, i); __PYX_ERR(2, 4774, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4774, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__enter__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4774, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.__enter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_42__enter__(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_42__enter__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_43__enter__, 0, __pyx_mstate_global->__pyx_n_u_QueryResult___enter, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[112])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4774, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_enter, __pyx_t_19) < (0)) __PYX_ERR(2, 4774, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+4775:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self);
  __pyx_r = __pyx_v_self;
  goto __pyx_L0;
 4776: 
+4777:     def __exit__(self, exc_type, exc_val, exc_tb):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_45__exit__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_45__exit__ = {"__exit__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_45__exit__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_45__exit__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  CYTHON_UNUSED PyObject *__pyx_v_exc_type = 0;
  CYTHON_UNUSED PyObject *__pyx_v_exc_val = 0;
  CYTHON_UNUSED PyObject *__pyx_v_exc_tb = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__exit__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,&__pyx_mstate_global->__pyx_n_u_exc_type,&__pyx_mstate_global->__pyx_n_u_exc_val,&__pyx_mstate_global->__pyx_n_u_exc_tb,0};
  PyObject* values[4] = {0,0,0,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4777, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(2, 4777, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4777, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4777, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4777, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__exit__", 0) < (0)) __PYX_ERR(2, 4777, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__exit__", 1, 4, 4, i); __PYX_ERR(2, 4777, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4777, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 4777, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(2, 4777, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(2, 4777, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
    __pyx_v_exc_type = values[1];
    __pyx_v_exc_val = values[2];
    __pyx_v_exc_tb = values[3];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 4, 4, __pyx_nargs); __PYX_ERR(2, 4777, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_44__exit__(__pyx_self, __pyx_v_self, __pyx_v_exc_type, __pyx_v_exc_val, __pyx_v_exc_tb);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_44__exit__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_exc_type, CYTHON_UNUSED PyObject *__pyx_v_exc_val, CYTHON_UNUSED PyObject *__pyx_v_exc_tb) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QueryResult.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_45__exit__, 0, __pyx_mstate_global->__pyx_n_u_QueryResult___exit, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[113])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_exit, __pyx_t_19) < (0)) __PYX_ERR(2, 4777, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+4778:         self.close()
  __pyx_t_2 = __pyx_v_self;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_close, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+4779:         return False
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_False);
  __pyx_r = Py_False;
  goto __pyx_L0;
 4780: 
+4781:     def __copy__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_47__copy__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_47__copy__ = {"__copy__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_47__copy__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_47__copy__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__copy__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4781, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4781, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__copy__", 0) < (0)) __PYX_ERR(2, 4781, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__copy__", 1, 1, 1, i); __PYX_ERR(2, 4781, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4781, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__copy__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4781, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_46__copy__(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_46__copy__(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("questdb._client.QueryResult.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_47__copy__, 0, __pyx_mstate_global->__pyx_n_u_QueryResult___copy, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[114])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_copy_2, __pyx_t_19) < (0)) __PYX_ERR(2, 4781, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
+4782:         raise TypeError('QueryResult cannot be copied: it is a single-use '
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_QueryResult_cannot_be_copied_it};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_Raise(__pyx_t_1, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __PYX_ERR(2, 4782, __pyx_L1_error)
 4783:                         'stream over one cursor')
 4784: 
+4785:     def __del__(self):
/* Python wrapper */
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_49__del__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_7questdb_7_client_11QueryResult_49__del__ = {"__del__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7questdb_7_client_11QueryResult_49__del__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7questdb_7_client_11QueryResult_49__del__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
  PyObject* values[1] = {0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len < 0)) __PYX_ERR(2, 4785, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4785, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__del__", 0) < (0)) __PYX_ERR(2, 4785, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__del__", 1, 1, 1, i); __PYX_ERR(2, 4785, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 4785, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__del__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 4785, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("questdb._client.QueryResult.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7questdb_7_client_11QueryResult_48__del__(__pyx_self, __pyx_v_self);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7questdb_7_client_11QueryResult_48__del__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  struct __pyx_obj_7questdb_7_client__CursorHandle *__pyx_v_handle = 0;
  struct __pyx_obj_7questdb_7_client__QueryStreamProducer *__pyx_v_prod = 0;
  int __pyx_v_outcome;
  PyObject *__pyx_r = NULL;
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("questdb._client.QueryResult.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_handle);
  __Pyx_XDECREF((PyObject *)__pyx_v_prod);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_t_19 = __Pyx_CyFunction_New(&__pyx_mdef_7questdb_7_client_11QueryResult_49__del__, 0, __pyx_mstate_global->__pyx_n_u_QueryResult___del, NULL, __pyx_mstate_global->__pyx_n_u_questdb__client, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[115])); if (unlikely(!__pyx_t_19)) __PYX_ERR(2, 4785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_19);
  #endif
  if (__Pyx_SetNameInClass(__pyx_t_18, __pyx_mstate_global->__pyx_n_u_del, __pyx_t_19) < (0)) __PYX_ERR(2, 4785, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
 4786:         cdef _CursorHandle handle
 4787:         cdef _QueryStreamProducer prod
+4788:         cdef int outcome = 0
  __pyx_v_outcome = 0;
+4789:         try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L8_try_end:;
  }
+4790:             handle = self._cursor_handle
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cursor_handle_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4790, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4790, __pyx_L3_error)
      __pyx_v_handle = ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_4);
      __pyx_t_4 = 0;
+4791:             if handle is None:
      __pyx_t_5 = (((PyObject *)__pyx_v_handle) == Py_None);
      if (__pyx_t_5) {
/* … */
      }
 4792:                 # After `__arrow_c_schema__`, a pending producer holds the
 4793:                 # cursor. Do not use `_cancel_handle` for a read result: a
 4794:                 # stream given to a consumer owns its cursor.
+4795:                 prod = self._schema_producer
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_schema_producer); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4795, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__QueryStreamProducer))))) __PYX_ERR(2, 4795, __pyx_L3_error)
        __pyx_v_prod = ((struct __pyx_obj_7questdb_7_client__QueryStreamProducer *)__pyx_t_4);
        __pyx_t_4 = 0;
+4796:                 if prod is not None:
        __pyx_t_5 = (((PyObject *)__pyx_v_prod) != Py_None);
        if (__pyx_t_5) {
/* … */
          goto __pyx_L10;
        }
+4797:                     handle = prod.cursor_handle
          __pyx_t_4 = ((PyObject *)__pyx_v_prod->cursor_handle);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_DECREF_SET(__pyx_v_handle, ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_4));
          __pyx_t_4 = 0;
+4798:                 elif self._consumed_by is None:
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed_by); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4798, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_5 = (__pyx_t_4 == Py_None);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (__pyx_t_5) {
/* … */
        }
        __pyx_L10:;
 4799:                     # cancel() dropped the pending producer, so only this
 4800:                     # result holds the cursor. (After close() or a failed
 4801:                     # schema read, the handle is gone or freed.)
+4802:                     handle = self._cancel_handle
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cancel_handle); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4802, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_mstate_global->__pyx_ptype_7questdb_7_client__CursorHandle))))) __PYX_ERR(2, 4802, __pyx_L3_error)
          __Pyx_DECREF_SET(__pyx_v_handle, ((struct __pyx_obj_7questdb_7_client__CursorHandle *)__pyx_t_4));
          __pyx_t_4 = 0;
+4803:             if handle is None:
      __pyx_t_5 = (((PyObject *)__pyx_v_handle) == Py_None);
      if (__pyx_t_5) {
/* … */
      }
+4804:                 return
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        goto __pyx_L7_try_return;
 4805:             # Reclaim FIRST, warn after. The warning used to come first inside
 4806:             # this same `except Exception: pass`, so under `-W error` (or
 4807:             # `simplefilter('error')`) the ResourceWarning raised, was
 4808:             # swallowed, and `close()` never ran -- the deterministic release
 4809:             # silently degraded to `_CursorHandle.__dealloc__`. Ordering the
 4810:             # free ahead of the warning makes that structurally impossible.
+4811:             outcome = handle._try_reclaim()
      __pyx_t_6 = ((struct __pyx_vtabstruct_7questdb_7_client__CursorHandle *)__pyx_v_handle->__pyx_vtab)->_try_reclaim(__pyx_v_handle); if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 4811, __pyx_L3_error)
      __pyx_v_outcome = __pyx_t_6;
+4812:             if outcome < 0:
      __pyx_t_5 = (__pyx_v_outcome < 0);
      if (__pyx_t_5) {
/* … */
      }
 4813:                 # Another thread owns the lock. It may not be freeing; leave
 4814:                 # the handle attached so its eventual __dealloc__ reclaims the
 4815:                 # cursor without blocking this finalizer.
+4816:                 return
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        goto __pyx_L7_try_return;
+4817:             self._drop_schema_producer()
      __pyx_t_7 = __pyx_v_self;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_8 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
        __pyx_t_4 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_drop_schema_producer, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4817, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+4818:             self._cursor_handle = None
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cursor_handle_2, Py_None) < (0)) __PYX_ERR(2, 4818, __pyx_L3_error)
+4819:             self._cancel_handle = None
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_cancel_handle, Py_None) < (0)) __PYX_ERR(2, 4819, __pyx_L3_error)
+4820:             self._consumed = True
      if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_consumed, Py_True) < (0)) __PYX_ERR(2, 4820, __pyx_L3_error)
+4821:         except Exception:
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_6) {
      __Pyx_ErrRestore(0,0,0);
+4822:             return
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;
+4823:         if outcome > 0:
  __pyx_t_5 = (__pyx_v_outcome > 0);
  if (__pyx_t_5) {
/* … */
  }
+4824:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L21_try_end;
      __pyx_L16_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __pyx_L18_except_error:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_1);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
      goto __pyx_L1_error;
      __pyx_L17_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_1);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
      __pyx_L21_try_end:;
    }
+4825:                 warnings.warn(
        __pyx_t_7 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_warnings); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4825, __pyx_L16_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_warn); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 4825, __pyx_L16_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 4826:                     'QueryResult was neither drained nor closed; its '
 4827:                     'pooled connection is being released by the garbage '
 4828:                     'collector. Use `with db.query(...)` or call '
 4829:                     '`close()`.',
+4830:                     ResourceWarning,
        __pyx_t_8 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_10);
          assert(__pyx_t_7);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_10, __pyx__function);
          __pyx_t_8 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[3 + ((CYTHON_VECTORCALL) ? 1 : 0)] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_QueryResult_was_neither_drained, ((PyObject *)(((PyTypeObject*)PyExc_ResourceWarning)))};
          __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 4825, __pyx_L16_error)
          __Pyx_GOTREF(__pyx_t_9);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_stacklevel, __pyx_mstate_global->__pyx_int_2, __pyx_t_9, __pyx_callargs+3, 0) < (0)) __PYX_ERR(2, 4825, __pyx_L16_error)
          __pyx_t_4 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_10, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 4825, __pyx_L16_error)
          __Pyx_GOTREF(__pyx_t_4);
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 4831:                     stacklevel=2)
+4832:             except Exception:
      __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_6) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L17_exception_handled;
      }
      goto __pyx_L18_except_error;
 4833:                 pass